《python核心程式設計》讀書筆記-建立UDP服務端/客戶端
阿新 • • 發佈:2019-01-13
UDP伺服器
偽碼
ss = socket() # 建立伺服器套接字
ss.bind() # 繫結伺服器套接字
inf_loop: # 伺服器無限迴圈
cs = ss.recvfrom()/ss.sendto() # 關閉(接收/傳送)
ss.close() # 關閉伺服器套接字
具體實現
[[email protected] ~]# cat udpserv.py #!/usr/bin/env python3.4 from socket import * #socket模組不需要下載,自帶了 from time import ctime HOST = '' PORT = 21567 BUFSIZE = 1024 ADDR = (HOST, PORT) udpSerSock = socket(AF_INET,SOCK_DGRAM) udpSerSock.bind(ADDR) while True: print ('waiting for message...') data,addr=udpSerSock.recvfrom(BUFSIZE) udpSerSock.sendto(('[%s] %s' % (ctime(),data.decode())).encode(),addr) print('...received from and returned to : ',addr) udpSerSock.close()
UDP客戶端
偽碼
cs = socket() # 建立客戶端套接字
comm_loop: # 通訊迴圈
cs.sendto()/cs.recvfrom() # 對話(傳送/接收)
cs.close() # 關閉客戶端套接字
具體實現
[[email protected] ~]# cat udpcli.py #!/usr/bin/env python3.4 from socket import * #socket模組不需要下載,自帶了 HOST = '' PORT = 21567 BUFSIZE = 1024 ADDR = (HOST, PORT) udpCliSock = socket(AF_INET,SOCK_DGRAM) while True: data= input('> ') if not data: break udpCliSock.sendto((data.encode()),ADDR) data,addr=udpCliSock.recvfrom(BUFSIZE) if not data: break print(data) udpCliSock.close()
以上都是測試成功的部分,下面是遇到的錯誤的總結
遇到的錯誤
客戶端遇到的問題
[[email protected] ~]# ./udpcli.py
> 123
Traceback (most recent call last):
File "./udpcli.py", line 16, in <module>
udpCliSock.sendto(data,ADDR)
TypeError: 'str' does not support the buffer interface
問題的部分程式碼
udpCliSock.sendto(data,ADDR)
解決方法,修改為
udpCliSock.sendto(data.encode(),ADDR)
服務端遇到的問題
[[email protected] ~]# ./udpserv.py
waiting for message...
Traceback (most recent call last):
File "./udpserv.py", line 17, in <module>
udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)
TypeError: 'str' does not support the buffer interface
有問題的部分程式碼
udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)
解決方法,修改為
udpSerSock.sendto(('[%s] %s' % (ctime(),data.decode())).encode(),addr)
參考的連結 https://blog.csdn.net/chuanchuan608/article/details/17915959