用Python使用socket网络编程聊天室
时间: 2023-11-05 08:06:33 浏览: 185
Python基于Socket实现简单聊天室
5星 · 资源好评率100%
好的,下面是一个简单的聊天室的 Python 代码示例,使用 socket 网络编程实现:
server.py:
```python
import socket
import threading
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 8000
# 绑定端口号
server_socket.bind((host, port))
# 设置最大连接数,超过后排队
server_socket.listen(5)
# 客户端列表
clients = []
# 用于广播消息到所有客户端
def broadcast(message):
for client in clients:
client.send(message)
# 处理客户端连接
def handle_client(client_socket, client_address):
print(f"New connection from {client_address}")
clients.append(client_socket)
while True:
# 接收客户端消息
message = client_socket.recv(1024)
if not message:
break
# 广播消息到所有客户端
broadcast(message)
# 关闭客户端连接
clients.remove(client_socket)
client_socket.close()
print(f"Connection from {client_address} closed")
# 循环监听客户端连接
while True:
# 等待客户端连接
client_socket, client_address = server_socket.accept()
# 创建新线程处理客户端连接
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
```
client.py:
```python
import socket
import threading
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
port = 8000
# 连接服务器
client_socket.connect((host, port))
# 接收服务器消息的线程函数
def receive():
while True:
message = client_socket.recv(1024)
print(message.decode())
# 创建新线程接收服务器消息
receive_thread = threading.Thread(target=receive)
receive_thread.start()
while True:
# 发送消息给服务器
message = input()
client_socket.send(message.encode())
```
在命令行中运行 server.py,然后在另一个命令行中运行 client.py,即可实现简单的聊天室功能。
阅读全文