udp伺服器就是實現乙個基於udp協議的伺服器來與客戶端通訊。就是用來收發資料,進行資料處理的。
與tcp伺服器不同的是不用建立連線,直接呼叫recvfrom來收包。
跟tcp伺服器一樣,udp伺服器也可以通過使用 socketserver 庫很容易地被建立。
先定義乙個實現 handle() 特殊方法的類,為客戶端連線服務。 這個類的 request 屬性是乙個包含了資料報和底層socket物件的元組。client_address 包含了客戶端位址。
from socketserver import baserequesthandler, udpserver
import time
class timehandler(baserequesthandler):
def handle(self):
print('got connection from', self.client_address)
message, sock = self.request
resp = time.ctime()
sock.sendto(resp.encode('ascii'), self.client_address)
if __name__ == '__main__':
serv = udpserver(('', 16888), timehandler)
serv.serve_forever()
-----------------------------
from socket import socket, af_inet, sock_dgram
s = socket(af_inet, sock_dgram)
s.sendto(b'', ('localhost', 16888))
print(s.recvfrom(8192))
udpserver 類是單執行緒的,一次只能為乙個客戶端連線服務。 如果想要併發操作,可以例項化乙個 forkingudpserver 或 threadingudpserver 物件
from socketserver import threadingudpserver
if __name__ == '__main__':
serv = threadingudpserver(('',20000), timehandler)
serv.serve_forever()
from socket import socket, af_inet, sock_dgram
import time
def time_server(address):
sock = socket(af_inet, sock_dgram)
sock.bind(address)
while true:
msg, addr = sock.recvfrom(8192)
print('got message from', addr)
resp = time.ctime()
sock.sendto(resp.encode('ascii'), addr)
if __name__ == '__main__':
time_server(('', 16888))
以上就是今天小灣給大家介紹的超詳細的建立udp伺服器的方法,各位學會了嗎?
android手機與伺服器基於UDP協議的通訊
通訊原理圖 在上圖中,1代表乙個socket連線,2代表另乙個socket連線。udp協議是非連線型的協議,這裡使用兩條線代表兩個連線是為了更好的描述問題 由於android手機在傳送乙個資料報給遠端伺服器之後,遠端伺服器一定能從資料報中獲取到傳送該資料報的ip 埠號,因此我們讓一號socket給伺...
與基於udp協議的tracker伺服器進行互動
通常bt客戶端每幾分鐘就要向tracker傳送一次請求.對於一些比較大的bt站點,其tracker的壓力是可想而知的.降低tracker的壓力首先考慮到的當然是採用更低網路開銷的udp協議.於是bittorrent udp tracker protocol應運而生.這個協議很簡單.下面是實現它的封裝...
基於UDP協議的伺服器 客戶端程式
udp網路程式採用的通訊模型與tcp網路程式模型有很大的不同,具體見圖7 4所示。udp伺服器首先進行初始化操作 呼叫函式socket建立乙個資料報型別的套接字,函式bind將這個套接字與伺服器的公認位址繫結在一起。然後呼叫函式recvfrom接收udp客戶機的資料報。udp客戶機首先呼叫函式soc...