Python3 socket即时通讯脚本实现代码实例
在本篇文章中,我们将实现一个基于Python3的socket即时通讯脚本,并使用threading模块实现多线程功能。通过这个脚本,我们可以在多个客户端之间进行实时的消息传递。
1. 实现服务器端代码
首先,我们需要实现一个服务器端的代码。服务器端需要监听指定的IP地址和端口,接收客户端的连接,并实现消息的转发功能。
1.1 导入模块
首先,我们需要导入socket和threading模块。
import socket
import threading
1.2 定义常量
接下来,我们需要定义一些常量,包括服务器的IP地址和端口号。
SERVER_ADDRESS = 'localhost'
SERVER_PORT = 8000
1.3 定义服务器类
接下来,我们定义一个服务器类,该类继承自threading.Thread类,并重写其run方法。
class Server(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.server_socket = None
self.client_sockets = []
def run(self):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind((SERVER_ADDRESS, SERVER_PORT))
self.server_socket.listen(5)
print("服务器启动,监听地址:{},端口:{}...".format(SERVER_ADDRESS, SERVER_PORT))
while True:
client_socket, client_address = self.server_socket.accept()
self.client_sockets.append(client_socket)
threading.Thread(target=self.handle_client, args=(client_socket,)).start()
def handle_client(self, client_socket):
while True:
data = client_socket.recv(1024)
if not data:
break
for socket_item in self.client_sockets:
socket_item.send(data)
def stop(self):
for socket_item in self.client_sockets:
socket_item.close()
self.server_socket.close()
print("服务器停止。")
在上面的代码中,我们创建了一个socket对象,并绑定到指定的地址和端口上。然后,服务器进入循环,不断接收客户端的连接,将连接的socket对象添加到client_sockets列表中,并开启一个新的线程来处理该客户端的消息。
在handle_client方法中,我们通过接收到的数据,使用循环将消息转发给所有的客户端。
最后,我们给服务器类添加了一个stop方法,在停止服务器时关闭所有的客户端连接。