用Python编写程序,实现两个人的聊天,必须是UDP双人聊天,首先带输入框,能够发送输入的内容 ,也要带显示框,能显示自己发送的内容也能能够接受并显示对方的消息
时间: 2024-02-21 07:56:44 浏览: 65
好的,让我来为你解答这个问题。
针对你的需求,我们可以使用 Python 的 socket 模块来实现 UDP 双人聊天程序。具体实现步骤如下:
1. 创建 UDP 套接字
在客户端和服务器端都需要创建一个 UDP 套接字来发送和接收消息。可以使用 Python 的 socket 模块创建一个 UDP 套接字,代码如下:
```python
import socket
# 创建 UDP 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定本地地址和端口号
local_address = ('localhost', 8888)
udp_socket.bind(local_address)
```
其中,`socket.AF_INET` 表示使用 IPv4 协议,`socket.SOCK_DGRAM` 表示使用 UDP 协议。
2. 实现双方聊天
在客户端和服务器端程序中,我们可以使用 `socket.recvfrom()` 方法来接收对方发送的消息,使用 `socket.sendto()` 方法来发送自己的消息。具体实现代码如下:
```python
# 服务器接收客户端消息
data, client_address = udp_socket.recvfrom(1024)
print('客户端说:', data.decode('utf-8'))
# 服务器发送消息给客户端
message = input('请输入:')
udp_socket.sendto(message.encode('utf-8'), client_address)
# 客户端接收服务器消息
data, server_address = udp_socket.recvfrom(1024)
print('服务器说:', data.decode('utf-8'))
# 客户端发送消息给服务器
message = input('请输入:')
udp_socket.sendto(message.encode('utf-8'), server_address)
```
其中,`socket.recvfrom()` 方法的参数 `1024` 表示每次最多接收 1024 字节的数据。`socket.sendto()` 方法的第一个参数是一个字节串,第二个参数是一个元组,表示对方的地址和端口号。
3. 完整代码
下面是一个完整的 UDP 双人聊天程序的代码:
服务端代码:
```python
import socket
# 创建 UDP 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定本地地址和端口号
local_address = ('localhost', 8888)
udp_socket.bind(local_address)
while True:
# 服务器接收客户端消息
data, client_address = udp_socket.recvfrom(1024)
print('客户端说:', data.decode('utf-8'))
# 服务器发送消息给客户端
message = input('请输入:')
udp_socket.sendto(message.encode('utf-8'), client_address)
# 关闭套接字
udp_socket.close()
```
客户端代码:
```python
import socket
# 创建 UDP 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定本地地址和端口号
local_address = ('localhost', 8889)
udp_socket.bind(local_address)
# 服务器地址和端口号
server_address = ('localhost', 8888)
while True:
# 客户端发送消息给服务器
message = input('请输入:')
udp_socket.sendto(message.encode('utf-8'), server_address)
# 客户端接收服务器消息
data, server_address = udp_socket.recvfrom(1024)
print('服务器说:', data.decode('utf-8'))
# 关闭套接字
udp_socket.close()
```
提示:以上代码只能实现双方轮流发送消息,不能同时接收和发送消息,如果需要同时接收和发送消息,可以使用多线程或多进程的方式来实现。
阅读全文