UDP客戶端編碼解析
在前面,我們對UDP協(xié)議的相關內(nèi)容也有了一定了解了。那么接下來我們則重點將誒少一下UDP客戶端的創(chuàng)建過程。首先讓我們看一下在Unix系統(tǒng)中,如何進行創(chuàng)建。那么請大家瀏覽文章看一下編寫的源碼。
創(chuàng)建一個UDP客戶端
這一節(jié)中介紹的4段程序中,下面的這段UDP客戶端代碼是最短的。偽代碼如下:
- cs = socket() # 創(chuàng)建客戶端套接字
- comm_loop: # 通訊循環(huán)
- cs.sendto()/cs.recvfrom() # 對話(發(fā)送/接收)
- cs.close() # 關閉客戶端套接字
在套接字對象創(chuàng)建好之后,我們就進入一個與服務器的對話循環(huán)。在通信結束后,套接字就被關閉了。tsUclnt.py真實的代碼在例16.4中給出。
逐行解釋
1~3行
還是跟TCP版本的客戶端一樣,在Unix的啟動信息行后,我們導入了socket模塊的所有屬性。
5~10行
因為我們的服務器也是運行在本機,我們的客戶端還是使用本機和相同的端口號。自然地,緩沖區(qū)的大小也還是1K。創(chuàng)建套接字的方法跟UDP服務器中的一樣。
12~22行
UDP客戶端的循環(huán)基本上與TCP客戶端的完全一樣。***的區(qū)別就是,我們不用先去跟UDP服務器建立連接,而是直接把消息發(fā)送出去,然后等待服務器的回復。得到加了時間戳的字符串后,把它顯示到屏幕上,然后再繼續(xù)其他的消息。在輸入結束后,退出循環(huán),關閉套接字。
例16.4 UDP時間戳客戶端(tsUclnt.py)
創(chuàng)建一個UDP客戶端,程序會提示用戶輸入要傳給服務器的信息,顯示服務器返回的加了時間戳的結果。
#!/usr/bin/env python
from socket import *
HOST=' localhost '
PORT=21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
udpCliSock = socket(AF_INET, SOCK_DGRAM)
while True:
data = raw_input('> ')
if not data:
break
udpCliSock.sendto(data, ADDR)
data, ADDR = udpCliSock.recvfrom(BUFSIZ)
if not data:
break
print dataudpClisock.close()
udpCliSock.close()