用socket写一个udp多线程通信客户端和服务端
时间: 2023-11-06 22:04:08 浏览: 106
基于UDP的socket的客户端与服务端
5星 · 资源好评率100%
下面是一个基于 Python 的 Socket 实现的 UDP 多线程通信的客户端和服务端的示例代码:
服务端代码:
```
import socket
import threading
# 定义服务器地址和端口号
HOST = '127.0.0.1'
PORT = 8000
# 创建 UDP Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind((HOST, PORT))
def receive_thread():
while True:
data, client_address = server_socket.recvfrom(1024)
print(f'Received message from {client_address}: {data.decode()}')
def send_thread():
while True:
message = input("please input message: ")
server_socket.sendto(message.encode(), (HOST, PORT))
# 创建接收和发送线程
receive_t = threading.Thread(target=receive_thread)
send_t = threading.Thread(target=send_thread)
# 启动线程
receive_t.start()
send_t.start()
# 等待线程结束
receive_t.join()
send_t.join()
# 关闭 Socket
server_socket.close()
```
客户端代码:
```
import socket
import threading
# 定义服务器地址和端口号
HOST = '127.0.0.1'
PORT = 8000
# 创建 UDP Socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def receive_thread():
while True:
data, server_address = client_socket.recvfrom(1024)
print(f'Received message from {server_address}: {data.decode()}')
def send_thread():
while True:
message = input("please input message: ")
client_socket.sendto(message.encode(), (HOST, PORT))
# 创建接收和发送线程
receive_t = threading.Thread(target=receive_thread)
send_t = threading.Thread(target=send_thread)
# 启动线程
receive_t.start()
send_t.start()
# 等待线程结束
receive_t.join()
send_t.join()
# 关闭 Socket
client_socket.close()
```
在上面的代码中,服务端和客户端的实现基本相同,只是在绑定 Socket 和发送消息时的地址和端口号不同。服务端使用了 server_socket.bind() 方法来将 Socket 绑定到指定的地址和端口号上,并使用 server_socket.recvfrom() 方法来接收客户端发送的消息。客户端使用了 client_socket.sendto() 方法来将消息发送给服务端,并使用 client_socket.recvfrom() 方法来接收服务端返回的响应。
需要注意的是,由于 UDP 是无连接的协议,因此每次发送消息时都需要指定目标地址和端口号。在本示例中,我们将其设置为 HOST 和 PORT。另外,由于是多线程通信,因此需要注意线程安全问题。可以使用锁等机制来保证数据的安全性。
阅读全文