Python3 socket即时通讯脚本实现代码实例(threading多

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方法,在停止服务器时关闭所有的客户端连接。

2. 实现客户端代码

后端开发标签