python+soket實現UDP協議的客戶/服務端中文聊天程序


 

沒什么特別的東西,網上爛大街的C/S框架。(基於windows 7 + python 3.4)

 

為了實現中文聊天,我加入了一點修改:

msg.encode('utf-8') # msg 為輸入(且將要發送出)的信息

data.decode('utf-8') # data 為接收的信息

這樣做的原因是 sendto 函數只能發送ASCII字符,不支持發送中文(在 python3 中,中文默認是unicode編碼)。

所以,信息在送出之前要編碼,在接收到信息之后要解碼

 

完整的兩個文件如下:

#udp-server.py
'''服務器'''

from socket import *

host = ''  #服務器地址
port = 12345  #服務器端口
bufsiz = 2048 #緩存大小
adds = (host, port) #地址+端口

udpsersock = socket(AF_INET, SOCK_DGRAM)  #創建UDP的套接字類型。
udpsersock.bind(adds)  #綁定到地址和端口

while True:
    msg = input('服務器說:')    #輸入數據
    data, addc = udpsersock.recvfrom(bufsiz)
    udpsersock.sendto(msg.encode('utf-8'), addc)
    
    if not data: break
    print('客戶端回答:', data.decode('utf-8'))
    
udpsersock.close()

 

#udp-client.py
'''客戶端'''

from socket import *

host = 'localhost'  #本地服務器地址
port = 12345  #客戶端端口(確保和服務器的端口一致
bufsiz = 2048 #緩存大小
addc = (host, port) #地址+端口

udpclisock = socket(AF_INET, SOCK_DGRAM)  #創建UDP的套接字類型。

while True:
    msg = input('客戶端說:')    #輸入數據
    udpclisock.sendto(msg.encode('utf-8'), addc)
    data, adds = udpclisock.recvfrom(bufsiz)
    
    if not data: break
    print('服務器回答:', data.decode('utf-8'))
    
udpclisock.close()

 

 

運行結果如圖:

 

(吐槽:python的input怎么按回車鍵沒用啊,只能Ctrl + D + Enter。  大俠救我!!!)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM