python使用socket創(chuàng)建tcp服務(wù)器和客戶端
python使用socket創(chuàng)建tcp服務(wù)器和客戶端。
服務(wù)器端為一個(gè)時(shí)間戳服務(wù)器,在接收到客戶端發(fā)來(lái)的數(shù)據(jù)后,自動(dòng)回復(fù)。
客戶端,等待用戶輸入,回車后向服務(wù)器發(fā)送用戶輸入的內(nèi)容。
分別在python2.7和python3.6下測(cè)試。在啟動(dòng)時(shí)需要先啟動(dòng)服務(wù)器端,在啟動(dòng)客戶端。
python2.7下
服務(wù)器端代碼為
#coding:utf-8
from socket import *
from time import ctime
print("=====================時(shí)間戳TCP服務(wù)器=====================");
HOST = '' #主機(jī)號(hào)為空白表示可以使用任何可用的地址。
PORT = 21567 #端口號(hào)
BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建TCP服務(wù)器套接字
tcpSerSock.bind(ADDR) #套接字與地址綁定
tcpSerSock.listen(5) #監(jiān)聽(tīng)連接,同時(shí)連接請(qǐng)求的最大數(shù)目
while True:
print('等待客戶端的連接...')
tcpCliSock, addr = tcpSerSock.accept() #接收客戶端連接請(qǐng)求
print('取得連接:', addr)
while True:
data = tcpCliSock.recv(BUFSIZ) #連續(xù)接收指定字節(jié)的數(shù)據(jù),接收到的是字節(jié)數(shù)組
if not data: #如果數(shù)據(jù)空白,則表示客戶端退出,所以退出接收
break
tcpCliSock.send('[%s] %s' % (ctime(), data)) #向客戶端發(fā)送時(shí)間戳數(shù)據(jù)
tcpCliSock.close() #關(guān)閉與客戶端的連接
tcpSerSock.close() #關(guān)閉服務(wù)器socket
客戶端代碼為
#coding:utf-8
from socket import *
print("=====================TCP客戶端=====================");
HOST = '127.0.0.1' #服務(wù)器ip地址,等價(jià)于localhost
PORT = 21567 #通信端口號(hào)
BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建客戶端套接字
tcpCliSock.connect(ADDR) #發(fā)起TCP連接
while True:
data = raw_input('> ') #接收用戶輸入
if not data: #如果用戶輸入為空,直接回車就會(huì)發(fā)送"",""就是代表false
break
tcpCliSock.send(data) #客戶端發(fā)送消息
data = tcpCliSock.recv(BUFSIZ) #接收回應(yīng)消息,接收到的是字節(jié)數(shù)組
if not data: #如果接收服務(wù)器信息失敗,或沒(méi)有消息回應(yīng)
break
print(data) #打印回應(yīng)消息
tcpCliSock.close() #關(guān)閉客戶端socket
python3.6下
服務(wù)器端代碼為
#coding:utf-8
from socket import *
from time import ctime
print("=====================時(shí)間戳TCP服務(wù)器=====================");
HOST = '127.0.0.1' #主機(jī)號(hào)為空白表示可以使用任何可用的地址。
PORT = 21567 #端口號(hào)
BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建TCP服務(wù)器套接字
tcpSerSock.bind(ADDR) #套接字與地址綁定
tcpSerSock.listen(5) #監(jiān)聽(tīng)連接,同時(shí)連接請(qǐng)求的最大數(shù)目
while True:
print('等待客戶端的連接...')
tcpCliSock, addr = tcpSerSock.accept() #接收客戶端連接請(qǐng)求
print('取得連接:', addr)
while True:
data = tcpCliSock.recv(BUFSIZ) #連續(xù)接收指定字節(jié)的數(shù)據(jù),接收到的是字節(jié)數(shù)組
if not data: #如果數(shù)據(jù)空白,則表示客戶端退出,所以退出接收
break
#tcpCliSock.send('[%s] %s' % (bytes(ctime(), 'utf-8'), data))
tcpCliSock.send(bytes('[%s] %s' % (ctime(), data.decode('utf-8')), 'utf-8')) #向客戶端發(fā)送時(shí)間戳數(shù)據(jù),必須發(fā)送字節(jié)數(shù)組
tcpCliSock.close() #關(guān)閉與客戶端的連接
tcpSerSock.close() #關(guān)閉服務(wù)器socket
客戶端代碼為
#coding:utf-8
from socket import *
print("=====================TCP客戶端=====================");
HOST = '127.0.0.1' #服務(wù)器ip地址,等價(jià)于localhost
PORT = 21567 #通信端口號(hào)
BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建客戶端套接字
tcpCliSock.connect(ADDR) #發(fā)起TCP連接
while True:
data = input('> ') #接收用戶輸入
if not data: #如果用戶輸入為空,直接回車就會(huì)發(fā)送"",""就是代表false
break
tcpCliSock.send(bytes(data, 'utf-8')) #客戶端發(fā)送消息,必須發(fā)送字節(jié)數(shù)組
data = tcpCliSock.recv(BUFSIZ) #接收回應(yīng)消息,接收到的是字節(jié)數(shù)組
if not data: #如果接收服務(wù)器信息失敗,或沒(méi)有消息回應(yīng)
break
print(data.decode('utf-8')) #打印回應(yīng)消息,或者str(data,"utf-8")
tcpCliSock.close() #關(guān)閉客戶端socket
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python時(shí)間轉(zhuǎn)化方法超全總結(jié)
在生活和工作中,我們每個(gè)人每天都在和時(shí)間打交道。本文就為大家總結(jié)了Python實(shí)現(xiàn)時(shí)間轉(zhuǎn)化的多種方法,快來(lái)跟隨小編一起學(xué)習(xí)一下吧2022-03-03
Python樹(shù)莓派學(xué)習(xí)筆記之UDP傳輸視頻幀操作詳解
這篇文章主要介紹了Python樹(shù)莓派學(xué)習(xí)筆記之UDP傳輸視頻幀操作,結(jié)合實(shí)例形式詳細(xì)分析了Python樹(shù)莓派編程中使用UDP協(xié)議進(jìn)行視頻幀傳輸?shù)南嚓P(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-11-11
python Selenium實(shí)現(xiàn)付費(fèi)音樂(lè)批量下載的實(shí)現(xiàn)方法
這篇文章主要介紹了python Selenium實(shí)現(xiàn)付費(fèi)音樂(lè)批量下載的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
Python實(shí)現(xiàn)將MySQL中所有表的數(shù)據(jù)都導(dǎo)出為CSV文件并壓縮
這篇文章主要為大家詳細(xì)介紹了如何使用Python將MySQL數(shù)據(jù)庫(kù)中所有表的數(shù)據(jù)都導(dǎo)出為CSV文件到一個(gè)目錄,并壓縮為zip文件到另一個(gè)目錄下,需要的可以了解下2025-03-03
對(duì)python中的 os.mkdir和os.mkdirs詳解
今天小編就為大家分享一篇對(duì)python中的 os.mkdir和os.mkdirs詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
分享Pandas庫(kù)中的一些寶藏函數(shù)transform()
Pandas具有很多強(qiáng)大的功能,transform就是其中之一,利用它可以高效地匯總數(shù)據(jù)且不改變數(shù)據(jù)行數(shù),transform是一種什么數(shù)據(jù)操作?如果熟悉SQL的窗口函數(shù),就非常容易理解了2021-09-09
Python采集數(shù)據(jù)保存CSV文件出現(xiàn)內(nèi)容亂碼的解決方法
這篇文章主要為大家詳細(xì)介紹了如何解決Python中保存CSV文件內(nèi)容亂碼的問(wèn)題,并提供詳細(xì)的示例代碼以更好地理解和解決這個(gè)問(wèn)題,希望對(duì)大家有所幫助2024-03-03
python處理“”開(kāi)頭加數(shù)字的html字符方法
在本篇文章里小編給大家整理了關(guān)于python如何處理“&#”開(kāi)頭加數(shù)字的html字符的相關(guān)知識(shí)點(diǎn)總結(jié),有興趣的朋友們學(xué)習(xí)下。2019-06-06
Python中的fileinput模塊的簡(jiǎn)單實(shí)用示例
這篇文章主要介紹了Python中的fileinput模塊實(shí)用示例,文中的示例是使用其來(lái)便利硬盤分區(qū)下的文本文件并打印其中行的長(zhǎng)度,需要的朋友可以參考下2015-07-07

