python 實(shí)現(xiàn)客戶端與服務(wù)端的通信
Socket對(duì)象方法:
服務(wù)端:
函數(shù) 描述 .bind() 綁定地址關(guān)鍵字,AF_INET下以元組的形式表示地址。常用bind((host,port)) .listen() 監(jiān)聽TCP,可以掛起的最大連接數(shù),該值至少為1,一般設(shè)為5即可 .accept() 被動(dòng)接受TCP客戶端的連接
客戶端:
函數(shù) 描述 .connect() 初始化服務(wù)器連接 .connect_ex() 是對(duì)connect()函數(shù)的擴(kuò)展,當(dāng)出錯(cuò)時(shí)返回出錯(cuò)碼,不報(bào)異常
其它函數(shù):
函數(shù) 描述 .recv() 接收數(shù)據(jù),數(shù)據(jù)以字符串的形式返回,bufsize指定接收的最大數(shù)據(jù)量。 .send() 發(fā)送數(shù)據(jù),將string中的數(shù)據(jù)發(fā)送到連接的套接字,返回值是要發(fā)送的字節(jié)數(shù)量,通常使用.encode()函數(shù)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)碼 .senddall() 發(fā)送完整的數(shù)據(jù),在返回之前會(huì)嘗試發(fā)送所有數(shù)據(jù),成功返回None,失敗則拋出異常。 .recvfrom() 與recv()函數(shù)類似,不同的是返回值是(data,address),其中data是包含接收數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址。 .sendto() 發(fā)送UDP數(shù)據(jù),將數(shù)據(jù)發(fā)送到套接字,形式是(ipaddr,port)的元組。 .close() 關(guān)閉套接字
服務(wù)端使用socket函數(shù)來創(chuàng)建一個(gè)socket對(duì)象,并設(shè)置一個(gè)socket服務(wù),然后通過bind(hostname,port)函數(shù)來指定一個(gè)端口,使用socket對(duì)象的accept方法,等待客戶端的連接,并返回connection對(duì)象。具體步驟為:
創(chuàng)建服務(wù)端套接字serversocket=socket()把地址綁定到套接字serversocket.bind()對(duì)連接進(jìn)行監(jiān)聽serversocket.listen()使用一個(gè)while進(jìn)行循環(huán),并接收客戶端的連接while True: serverclient=serversocket.accept() while True: #接收已發(fā)送 serverclient.recv() serverclient.send() #關(guān)閉客戶端套接字 serverclient.close()關(guān)閉服務(wù)端套接字serversocket.close()具體代碼實(shí)現(xiàn):
import socketimport sysimport timeserversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostname()#獲取本地主機(jī)名port=9999#綁定端口號(hào)serversocket.bind((host,port))#設(shè)置最大連接數(shù)serversocket.listen(5)while True: print(’服務(wù)器啟動(dòng),監(jiān)聽客戶端鏈接’) clientsocket,addr=serversocket.accept() print(’鏈接地址:%s’ % str(addr)) while True: try: data=clientsocket.recv(1024) except Exception: print(’斷開的客戶端:’,addr) break print(’客戶端發(fā)送內(nèi)容:’,data.decode(’utf-8’)) reply=input(’回復(fù):’).strip() if not reply: break msg=time.strftime(’%Y-%m-%d %X’)#獲取結(jié)構(gòu)化時(shí)間戳 msg1=’[%s]:%s’% (msg,reply) clientsocket.send(msg1.encode(’utf-8’)) clientsocket.close()serversocket.closel()
實(shí)現(xiàn)功能:通過while實(shí)現(xiàn)循環(huán)接收客戶端發(fā)送的數(shù)據(jù),并對(duì)客戶端發(fā)送的數(shù)據(jù)進(jìn)行顯示并返回給客戶端數(shù)據(jù),返回給客戶端的數(shù)據(jù)信息后加入時(shí)間戳。
客戶端創(chuàng)建一個(gè)客戶端用來連接以上服務(wù)的的服務(wù),使用socket.connect()方法打開一個(gè)TCP連接到主機(jī),連接后可以從服務(wù)端獲取數(shù)據(jù),在操作完成后關(guān)閉連接。 具體步驟為: ``` 創(chuàng)建客戶端的套接字 client=socket() 嘗試連接服務(wù)器 client.connect() 發(fā)送并接收數(shù)據(jù) client.send() client.recv() 關(guān)閉客戶端套接字 client.close() ``` **具體代碼實(shí)現(xiàn):**
import socketimport syss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host=socket.gethostname()port=9999s.connect((host,port))while True: data= input(’>>’).strip() if not data: break s.send(data.encode(’utf-8’)) msg=s.recv(1024) if not msg: break print(msg.decode(’utf-8’))s.close()測(cè)試
使用cmd命令行中打開到代碼所在文件目錄,執(zhí)行python 服務(wù)端文件名.py,再另打開一個(gè)cmd命令界面執(zhí)行 python 客戶端文件名.py在pycharm中運(yùn)行服務(wù)端代碼,運(yùn)行結(jié)果:
在cmd中運(yùn)行客戶端代碼,運(yùn)行結(jié)果:
以上就是python 實(shí)現(xiàn)客戶端與服務(wù)端的通信的詳細(xì)內(nèi)容,更多關(guān)于python 客戶端與服務(wù)端的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. phpstudy apache開啟ssi使用詳解2. vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令3. Xml簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理4. JSP之表單提交get和post的區(qū)別詳解及實(shí)例5. 詳解瀏覽器的緩存機(jī)制6. xml中的空格之完全解說7. jsp實(shí)現(xiàn)登錄驗(yàn)證的過濾器8. jsp文件下載功能實(shí)現(xiàn)代碼9. 使用Hangfire+.NET 6實(shí)現(xiàn)定時(shí)任務(wù)管理(推薦)10. 如何在jsp界面中插入圖片
