写一个即时通讯的网络编程
时间: 2023-07-23 07:05:21 浏览: 50
这是一个简单的即时通讯的网络编程示例,使用Python的socket模块实现:
服务端代码:
```python
import socket
import threading
# 服务器IP和端口号
SERVER_HOST = "localhost"
SERVER_PORT = 8000
# 创建socket对象,指定网络通信协议为TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP和端口号
server_socket.bind((SERVER_HOST, SERVER_PORT))
# 开始监听,等待客户端连接
server_socket.listen()
# 客户端列表
clients = []
def handle_client(client_socket, client_address):
while True:
try:
# 接收客户端消息
message = client_socket.recv(1024).decode('utf-8')
if message:
print("[{}:{}]: {}".format(client_address[0], client_address[1], message))
# 广播消息给所有客户端
broadcast(message, client_address)
else:
# 客户端断开连接
remove_client(client_socket)
except:
# 出现异常,客户端断开连接
remove_client(client_socket)
break
def broadcast(message, sender_address):
# 广播消息给所有客户端
for client in clients:
if client.getpeername() != sender_address:
client.sendall(message.encode('utf-8'))
def remove_client(client_socket):
# 移除客户端
if client_socket in clients:
clients.remove(client_socket)
client_socket.close()
while True:
# 等待客户端连接
client_socket, client_address = server_socket.accept()
print("[{}:{}]: Connected".format(client_address[0], client_address[1]))
# 将客户端添加到列表中
clients.append(client_socket)
# 创建新线程处理客户端消息
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
```
客户端代码:
```python
import socket
import threading
# 服务器IP和端口号
SERVER_HOST = "localhost"
SERVER_PORT = 8000
def receive_message(client_socket):
while True:
try:
# 接收服务器消息
message = client_socket.recv(1024).decode('utf-8')
if message:
print(message)
else:
# 服务器断开连接
client_socket.close()
break
except:
# 出现异常,服务器断开连接
client_socket.close()
break
def send_message(client_socket):
while True:
# 发送消息给服务器
message = input()
client_socket.sendall(message.encode('utf-8'))
# 创建socket对象,指定网络通信协议为TCP
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect((SERVER_HOST, SERVER_PORT))
# 创建新线程接收服务器消息
receive_thread = threading.Thread(target=receive_message, args=(client_socket,))
receive_thread.start()
# 创建新线程发送消息给服务器
send_thread = threading.Thread(target=send_message, args=(client_socket,))
send_thread.start()
```
使用方法:
1. 运行服务端代码
2. 运行多个客户端代码
3. 在客户端上输入消息,服务端会将消息广播给所有客户端