python socket 网络聊天的代码
时间: 2023-12-11 20:04:44 浏览: 32
以下是一个简单的 Python Socket 网络聊天代码示例,其中两个客户端可以在不同的终端之间进行实时聊天。
```python
# server.py
import socket
HOST = 'localhost'
PORT = 8000
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen()
print(f'Server started on {HOST}:{PORT}')
client_sockets = []
while True:
client_socket, addr = server_socket.accept()
client_sockets.append(client_socket)
print(f'Connected by {addr}')
for sock in client_sockets:
if sock != client_socket:
sock.sendall(b'A new user has joined the chat!')
while True:
data = client_socket.recv(1024)
if not data:
break
message = data.decode()
print(f'Received message: {message}')
for sock in client_sockets:
if sock != client_socket:
sock.sendall(data)
client_sockets.remove(client_socket)
client_socket.close()
for sock in client_sockets:
sock.sendall(b'A user has left the chat.')
```
```python
# client.py
import socket
import threading
HOST = 'localhost'
PORT = 8000
nickname = input('Enter your nickname: ')
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))
def receive():
while True:
try:
message = client_socket.recv(1024).decode()
if message == 'NICK':
client_socket.send(nickname.encode())
else:
print(message)
except:
print('An error occurred!')
client_socket.close()
break
def write():
while True:
message = f'{nickname}: {input("")}'
client_socket.send(message.encode())
receive_thread = threading.Thread(target=receive)
receive_thread.start()
write_thread = threading.Thread(target=write)
write_thread.start()
```
在终端中分别运行 server.py 和两个 client.py,客户端可以输入消息并将其发送到服务器,服务器将消息广播给所有连接的客户端。