谷歌叔叔想出了User Datagram Client and Server
用戶數據報客戶端和服務器
用戶數據報協議(UDP)從TCP/IP的工作方式不同。在TCP是面向流的協議的情況下,確保所有數據以正確的順序傳輸,UDP是面向消息的協議。 UDP不需要長時間的連接,因此設置UDP套接字更簡單一些。另一方面,UDP消息必須適合單個數據包(對於IPv4,這意味着它們只能容納65,507個字節,因爲65,535字節的數據包中也包含標題信息),並且不像TCP那樣保證傳輸。
回聲服務器
由於沒有連接本身,服務器並不需要偵聽和接受連接。它只需要使用bind()將其套接字與端口相關聯,然後等待單個消息。
import socket
import sys
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind the socket to the port
server_address = ('localhost', 10000)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
使用recvfrom()函數從套接字讀取消息,該函數返回數據以及從中發送數據的客戶端的地址。
while True:
print >>sys.stderr, '\nwaiting to receive message'
data, address = sock.recvfrom(4096)
print >>sys.stderr, 'received %s bytes from %s' % (len(data), address)
print >>sys.stderr, data
if data:
sent = sock.sendto(data, address)
print >>sys.stderr, 'sent %s bytes back to %s' % (sent, address)
回聲客戶
的UDP回聲客戶端是類似的服務器,但不使用綁定()將其套接字連接到的地址。它使用sendto()將其消息直接傳遞給服務器,並使用recvfrom()來接收響應。
import socket
import sys
# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 10000)
message = 'This is the message. It will be repeated.'
try:
# Send data
print >>sys.stderr, 'sending "%s"' % message
sent = sock.sendto(message, server_address)
# Receive response
print >>sys.stderr, 'waiting to receive'
data, server = sock.recvfrom(4096)
print >>sys.stderr, 'received "%s"' % data
finally:
print >>sys.stderr, 'closing socket'
sock.close()
客戶端和服務器一起
運行服務器產生:
$ python ./socket_echo_server_dgram.py
starting up on localhost port 10000
waiting to receive message
received 42 bytes from ('127.0.0.1', 50139)
This is the message. It will be repeated.
sent 42 bytes back to ('127.0.0.1', 50139)
waiting to receive message
和客戶端輸出是:
$ python ./socket_echo_client_dgram.py
sending "This is the message. It will be repeated."
waiting to receive
received "This is the message. It will be repeated."
closing socket
$
旁白:你的閱讀文件的方式只是可怕... –
@ Jean-FrançoisFabreyep ... as i sai d我不是Python代碼,我只需要一個快速而髒的UDP套接字來工作:( –
發送給你需要它的IP和端口的人。你綁定到'('localhost',9763)'後來你發送給'('localhost',9763)',所以你發送給自己,而不是其他程序。 – furas