Python网络编程之UDP
一、Socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少需要两端(socket)。socket本质是编程接口(API),是对TCP/IP或UDP/IP协议的封装,TCP/IP或UDP/IP协议也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
二、UDP协议
UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。
UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。
-
udp通信中,服务器客户端通信流程:
udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可。
三、UDP控制台消息传输示例
服务器端:
from socket import *
from time import ctime
HOST = ''
PORT = 8888
BUFSIZ = 1024
ADDRESS = (HOST, PORT)
udpServerSocket = socket(AF_INET, SOCK_DGRAM)
udpServerSocket.bind(ADDRESS) # 绑定客户端口和地址
while True:
print("waiting for message...")
data, addr = udpServerSocket.recvfrom(BUFSIZ)
print("接收到数据:", data.decode('utf-8'))
content = '[%s] %s' % (bytes(ctime(), 'utf-8'), data.decode('utf-8'))
udpServerSocket.sendto(content.encode('utf-8'), addr)
print('...received from and returned to:', addr)
udpServerSocket.close()
客户端:
from socket import *
HOST = '127.0.0.1'
PORT = 8888
BUFSIZ = 1024
ADDRESS = (HOST, PORT)
udpClientSocket = socket(AF_INET, SOCK_DGRAM)
while True:
data = input('>')
if not data:
break
# 发送数据
udpClientSocket.sendto(data.encode('utf-8'), ADDRESS)
# 接收数据
data, ADDR = udpClientSocket.recvfrom(BUFSIZ)
if not data:
break
print("服务器端响应:", data.decode('utf-8'))
udpClientSocket.close()
网友评论