创建一个简单的聊天工具,可以使用Python的`socket`模块进行网络通信,并通过多线程处理多个客户端的连接。以下是一个基本的聊天服务器和客户端的示例代码:
服务器端代码
import socket
import threading
SERVER_HOST = '127.0.0.1'
SERVER_PORT = 12345
def handle_client(client_socket, addr):
print(f"[{addr}:{addr}] 已连接")
while True:
try:
message = client_socket.recv(1024).decode('utf-8')
if message == 'exit':
break
print(f"[{addr}:{addr}] 收到消息: {message}")
client_socket.sendall(f"服务器收到消息: {message}".encode('utf-8'))
except Exception as e:
print(f"客户端断开连接: {e}")
break
client_socket.close()
def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((SERVER_HOST, SERVER_PORT))
server.listen(5)
print(f"服务器启动,监听 {SERVER_HOST}:{SERVER_PORT}")
while True:
client_socket, addr = server.accept()
client_handler = threading.Thread(target=handle_client, args=(client_socket, addr))
client_handler.start()
if __name__ == "__main__":
main()
客户端代码
import socket
SERVER_HOST = '127.0.0.1'
SERVER_PORT = 12345
def main():
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((SERVER_HOST, SERVER_PORT))
while True:
message = input("请输入消息: ")
if message.lower() == 'exit':
break
client.sendall(message.encode('utf-8'))
data = client.recv(1024)
print(f"收到服务器消息: {data.decode('utf-8')}")
client.close()
if __name__ == "__main__":
main()
运行步骤
1. 首先运行服务器端代码,启动聊天服务器。
2. 然后运行客户端代码,连接到服务器。
3. 在客户端输入消息并发送,服务器和客户端将互相显示接收到的消息。
4. 若要退出,客户端发送'exit'消息,服务器和客户端都将断开连接。
这个示例代码展示了如何使用Python的`socket`模块创建一个简单的聊天服务器和客户端,并实现基本的消息发送和接收功能。在实际应用中,你可能需要添加更多的功能,比如用户认证、私聊、群聊、消息持久化等,并考虑使用更高级的套接字编程技术,如`asyncio`,以提高性能和扩展性。