UDP编程实验可以通过以下步骤实现:
创建UDP套接字
使用`socket.socket(socket.AF_INET, socket.SOCK_DGRAM)`创建一个UDP套接字。`AF_INET`表示使用IPv4地址族,`SOCK_DGRAM`表示使用数据报套接字。
绑定本地地址和端口
使用`bind()`方法将套接字绑定到本地IP地址和端口。例如,`server_socket.bind(('0.0.0.0', 9999))`将套接字绑定到所有可用的网络接口的9999端口。
发送数据
使用`sendto()`方法发送数据。需要将数据封装成数据报的形式,并指定目标地址和端口。例如,`client_socket.sendto(msg.encode(), ('localhost', 12000))`将消息发送到本地主机的12000端口。
接收数据
使用`recvfrom()`方法接收数据。需要创建一个缓冲区来存储接收到的数据,并指定缓冲区的大小。例如,`data, addr = server_socket.recvfrom(1024)`接收最多1024字节的数据,并返回发送方的地址。
关闭套接字
在完成数据的发送和接收后,使用`close()`方法关闭套接字,释放系统资源。
UDP服务器:
```python
import socket
创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
绑定地址和端口
server_socket.bind(('0.0.0.0', 9999))
print("UDP服务器已启动...")
while True:
接收数据
data, addr = server_socket.recvfrom(1024)
print(f"收到来自 {addr} 的消息: {data.decode()}")
发送回复
reply = f"收到你的消息: {data.decode()}"
server_socket.sendto(reply.encode(), addr)
```
UDP客户端:
```python
import socket
创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_addr = ('localhost', 9999)
while True:
msg = input("请输入消息: ")
if msg == 'quit':
break
发送数据
client_socket.sendto(msg.encode(), server_addr)
```
通过以上步骤和示例代码,你可以实现一个基本的UDP通信实验。根据需求,你可以进一步扩展和优化代码,例如添加多线程处理、广播和多播功能等。