您好,登錄后才能下訂單哦!
使用python怎么實現客戶端與服務端之間的通信?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Socket對象方法:
服務端:
函數 | 描述 |
---|---|
.bind() | 綁定地址關鍵字,AF_INET下以元組的形式表示地址。常用bind((host,port)) |
.listen() | 監聽TCP,可以掛起的最大連接數,該值至少為1,一般設為5即可 |
.accept() | 被動接受TCP客戶端的連接 |
客戶端:
函數 | 描述 |
---|---|
.connect() | 初始化服務器連接 |
.connect_ex() | 是對connect()函數的擴展,當出錯時返回出錯碼,不報異常 |
其它函數:
函數 | 描述 |
---|---|
.recv() | 接收數據,數據以字符串的形式返回,bufsize指定接收的最大數據量。 |
.send() | 發送數據,將string中的數據發送到連接的套接字,返回值是要發送的字節數量,通常使用.encode()函數對數據進行轉碼 |
.senddall() | 發送完整的數據,在返回之前會嘗試發送所有數據,成功返回None,失敗則拋出異常。 |
.recvfrom() | 與recv()函數類似,不同的是返回值是(data,address),其中data是包含接收數據的字符串,address是發送數據的套接字地址。 |
.sendto() | 發送UDP數據,將數據發送到套接字,形式是(ipaddr,port)的元組。 |
.close() | 關閉套接字 |
使用socket函數來創建一個socket對象,并設置一個socket服務,然后通過bind(hostname,port)函數來指定一個端口,使用socket對象的accept方法,等待客戶端的連接,并返回connection對象。
具體步驟為:
創建服務端套接字 serversocket=socket() 把地址綁定到套接字 serversocket.bind() 對連接進行監聽 serversocket.listen() 使用一個while進行循環,并接收客戶端的連接 while True: serverclient=serversocket.accept() while True: #接收已發送 serverclient.recv() serverclient.send() #關閉客戶端套接字 serverclient.close() 關閉服務端套接字 serversocket.close()
import socket import sys import time serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) host=socket.gethostname()#獲取本地主機名 port=9999 #綁定端口號 serversocket.bind((host,port)) #設置最大連接數 serversocket.listen(5) while True: print('服務器啟動,監聽客戶端鏈接') clientsocket,addr=serversocket.accept() print('鏈接地址:%s' % str(addr)) while True: try: data=clientsocket.recv(1024) except Exception: print('斷開的客戶端:',addr) break print('客戶端發送內容:',data.decode('utf-8')) reply=input('回復:').strip() if not reply: break msg=time.strftime('%Y-%m-%d %X')#獲取結構化時間戳 msg1='[%s]:%s'% (msg,reply) clientsocket.send(msg1.encode('utf-8')) clientsocket.close() serversocket.closel()
實現功能:通過while實現循環接收客戶端發送的數據,并對客戶端發送的數據進行顯示并返回給客戶端數據,返回給客戶端的數據信息后加入時間戳。
創建一個客戶端用來連接以上服務的的服務,使用socket.connect()方法打開一個TCP連接到主機,連接后可以從服務端獲取數據,在操作完成后關閉連接。 具體步驟為: ``` 創建客戶端的套接字 client=socket() 嘗試連接服務器 client.connect() 發送并接收數據 client.send() client.recv() 關閉客戶端套接字 client.close() ``` **具體代碼實現:**
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命令行中打開到代碼所在文件目錄,執行python 服務端文件名.py,再另打開一個cmd命令界面執行 python 客戶端文件名.py
在pycharm中運行服務端代碼,運行結果:
在cmd中運行客戶端代碼,運行結果:
看完上述內容,你們掌握使用python怎么實現客戶端與服務端之間的通信的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。