一天,你和你的好基友 放学回来,想和同学聊天,可又不想用微信,这款代码可以解决我们的烦恼。话不多说,直接上代码
SERVER端
import socket
import threading
def handle_client(client_socket, client_address):
nickname = client_socket.recv(1024).decode()
print(f"客户 {client_address[0]}:{client_address[1]} 连接方名称为 {nickname}")
broadcast_message(f"{nickname} 加入了聊天", client_address, nickname)
while True:
try:
data = client_socket.recv(1024).decode()
if data:
print(f"收到的消息来自于 {client_address[0]}:{client_address[1]} - {data}")
broadcast_message(data, client_address, nickname)
except:
print(f"客户 {client_address[0]}:{client_address[1]} 断开了连接")
broadcast_message(f"{nickname} 离开了聊天", client_address, nickname)
client_socket.close()
break
def broadcast_message(message, sender_address, sender_nickname):
for client_socket, client_address, client_nickname in clients:
if client_address != sender_address:
client_socket.sendall(f"{sender_nickname}: {message}".encode())
def start_server(port):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', port))
server_socket.listen(5)
print(f"服务器此端口上启动 {port}")
while True:
client_socket, client_address = server_socket.accept()
client_nickname = client_socket.recv(1024).decode()
clients.append((client_socket, client_address, client_nickname))
threading.Thread(target=handle_client, args=(client_socket, client_address)).start()
clients = []
if __name__ == "__main__":
port = int(input("请输入服务器端口:"))
start_server(port)
CLIEND端
import socket
import threading
def receive_messages():
while True:
try:
data = client_socket.recv(1024).decode()
if data:
print(data)
except:
print("与服务器断开连接")
client_socket.close()
break
def send_message():
while True:
message = input()
if message:
client_socket.sendall(message.encode())
def start_client(server_ip, server_port):
global client_socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_ip, server_port))
print(f"已连接到服务器 {server_ip}:{server_port}")
nickname = input("输入您的昵称(请输入第一遍):")
print('请输入第二遍以便确认')
client_socket.sendall(nickname.encode())
threading.Thread(target=receive_messages).start()
threading.Thread(target=send_message).start()
if __name__ == "__main__":
server_ip = input("输入服务器IP地址:")
server_port = int(input("输入服务器端口:"))
start_client(server_ip, server_port)