python 實(shí)現(xiàn)客戶端與服務(wù)端的通信
函數(shù)介紹
Socket對象方法:
服務(wù)端:
函數(shù) | 描述 |
---|---|
.bind() | 綁定地址關(guān)鍵字,AF_INET下以元組的形式表示地址。常用bind((host,port)) |
.listen() | 監(jiān)聽TCP,可以掛起的最大連接數(shù),該值至少為1,一般設(shè)為5即可 |
.accept() | 被動接受TCP客戶端的連接 |
客戶端:
函數(shù) | 描述 |
---|---|
.connect() | 初始化服務(wù)器連接 |
.connect_ex() | 是對connect()函數(shù)的擴(kuò)展,當(dāng)出錯時返回出錯碼,不報異常 |
其它函數(shù):
函數(shù) | 描述 |
---|---|
.recv() | 接收數(shù)據(jù),數(shù)據(jù)以字符串的形式返回,bufsize指定接收的最大數(shù)據(jù)量。 |
.send() | 發(fā)送數(shù)據(jù),將string中的數(shù)據(jù)發(fā)送到連接的套接字,返回值是要發(fā)送的字節(jié)數(shù)量,通常使用.encode()函數(shù)對數(shù)據(jù)進(jìn)行轉(zhuǎn)碼 |
.senddall() | 發(fā)送完整的數(shù)據(jù),在返回之前會嘗試發(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)建一個socket對象,并設(shè)置一個socket服務(wù),然后通過bind(hostname,port)函數(shù)來指定一個端口,使用socket對象的accept方法,等待客戶端的連接,并返回connection對象。
具體步驟為:
創(chuàng)建服務(wù)端套接字 serversocket=socket() 把地址綁定到套接字 serversocket.bind() 對連接進(jìn)行監(jiān)聽 serversocket.listen() 使用一個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 socket import sys import time serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) host=socket.gethostname()#獲取本地主機(jī)名 port=9999 #綁定端口號 serversocket.bind((host,port)) #設(shè)置最大連接數(shù) serversocket.listen(5) while True: print('服務(wù)器啟動,監(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)化時間戳 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ù),并對客戶端發(fā)送的數(shù)據(jù)進(jìn)行顯示并返回給客戶端數(shù)據(jù),返回給客戶端的數(shù)據(jù)信息后加入時間戳。
客戶端
創(chuàng)建一個客戶端用來連接以上服務(wù)的的服務(wù),使用socket.connect()方法打開一個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 socket import sys s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) host=socket.gethostname() port=9999 s.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()
測試
使用cmd命令行中打開到代碼所在文件目錄,執(zhí)行python 服務(wù)端文件名.py,再另打開一個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ù)端的資料請關(guān)注腳本之家其它相關(guān)文章!
- python thrift搭建服務(wù)端和客戶端測試程序
- python thrift 實(shí)現(xiàn) 單端口多服務(wù)的過程
- python3.7通過thrift操作hbase的示例代碼
- python使用thrift教程的方法示例
- python利用thrift服務(wù)讀取hbase數(shù)據(jù)的方法
- python 如何用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù))
- Python連接Java Socket服務(wù)端的實(shí)現(xiàn)方法
- python網(wǎng)絡(luò)編程socket實(shí)現(xiàn)服務(wù)端、客戶端操作詳解
- Python Websocket服務(wù)端通信的使用示例
- python實(shí)現(xiàn)Thrift服務(wù)端的方法
相關(guān)文章
Python實(shí)現(xiàn)校園網(wǎng)自動登錄的腳本分享
這篇文章主要和大家分享一個Python腳本,leukemia實(shí)現(xiàn)校園網(wǎng)自動登錄功能。文中的示例代碼簡潔易懂,快跟隨小編一起動手嘗試一下吧2022-06-06Python3.4學(xué)習(xí)筆記之類型判斷,異常處理,終止程序操作小結(jié)
這篇文章主要介紹了Python3.4學(xué)習(xí)筆記之類型判斷,異常處理,終止程序操作,結(jié)合具體實(shí)例形式分析了Python3.4模塊導(dǎo)入、異常處理、退出程序等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-03-03pd.read_csv讀取文件路徑出現(xiàn)的問題解決
本文主要介紹了pd.read_csv讀取文件路徑出現(xiàn)的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06使用PIL(Python-Imaging)反轉(zhuǎn)圖像的顏色方法
今天小編就為大家分享一篇使用PIL(Python-Imaging)反轉(zhuǎn)圖像的顏色方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01python實(shí)現(xiàn)對svn操作及信息獲取
這篇文章主要介紹了python實(shí)現(xiàn)對svn的操作及信息獲取示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10解決jupyter不是內(nèi)部或外部命令,也不是可運(yùn)行程序問題
這篇文章主要介紹了解決jupyter不是內(nèi)部或外部命令,也不是可運(yùn)行程序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Python Switch Case三種實(shí)現(xiàn)方法代碼實(shí)例
這篇文章主要介紹了Python Switch Case2種實(shí)現(xiàn)方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06