在Python中实现聊天程序,你可以使用`socket`模块来创建客户端和服务器端的通信。以下是一个简单的聊天程序示例,使用`socket`模块实现全双工通信,并添加了图形用户界面(GUI)来提升用户体验。
服务器端代码
import socket
import threading
def handle_client(client_socket, addr):
print(f"连接地址: {addr}")
while True:
try:
message = client_socket.recv(1024).decode('utf-8')
if message == 'bye' or message == '拜拜':
break
print(f"服务器收到消息: {message}")
client_socket.send(message.encode('utf-8'))
except:
break
client_socket.close()
def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 5650))
server.listen(5)
print("服务器已启动")
while True:
client_socket, addr = server.accept()
print(f"已连接到 {addr}")
client_handler = threading.Thread(target=handle_client, args=(client_socket, addr))
client_handler.start()
if __name__ == "__main__":
main()
客户端代码
import socket
import threading
import tkinter as tk
from tkinter import messagebox
def receive_messages(client_socket):
while True:
try:
message = client_socket.recv(1024).decode('utf-8')
if message == 'bye' or message == '拜拜':
break
messagebox.showinfo("聊天消息", message)
except:
break
def main():
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 5650))
receive_thread = threading.Thread(target=receive_messages, args=(client,))
receive_thread.start()
while True:
message = input("客户端: ")
if message == 'bye' or message == '拜拜':
break
client.send(message.encode('utf-8'))
if message == 'exit':
break
client.close()
if __name__ == "__main__":
main()
运行步骤
1. 首先运行服务器端代码,启动聊天服务器。
2. 然后运行客户端代码,启动聊天客户端。
3. 在客户端窗口中输入消息并发送,服务器端和客户端将交替显示接收到的消息。
4. 若要退出聊天,客户端输入“exit”,服务器端输入“拜拜”或“bye”。
这个示例代码展示了如何使用Python的`socket`模块创建一个简单的聊天程序,并通过多线程实现全双工通信。你可以在此基础上添加更多功能,如用户认证、私聊、群聊等。