基於UDP協議的伺服器 UDP伺服器建立方案

2021-10-10 07:33:34 字數 1703 閱讀 2240

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...