当前仓库属于关闭状态,部分功能使用受限,详情请查阅 仓库状态说明
1 Star 1 Fork 0

Pimoshi / 天聊 SkyChat
关闭

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
sever.py 2.06 KB
一键复制 编辑 原始数据 按行查看 历史
Pimoshi 提交于 2024-02-20 17:20 . 补充注释2024/2/20
#导入所需的库
import socket
import threading
# 配置服务器参数
HOST = 'localhost'#设置服务器IP地址
PORT = 12345 #设置服务器端口
BUFFER_SIZE = 1024 #设置缓冲区大小
#创建客户端套接字列表
clients = []
# 处理客户端连接的函数
def handle_client(client_socket):
# 添加客户端套接字到列表
clients.append(client_socket)
try:
while True:
# 接收客户端发来的数据
data = client_socket.recv(BUFFER_SIZE)
if not data:
# 客户端断开连接
break
message = data.decode('utf-8')
print(f"Received message from client: {message}")
# 将消息广播给所有客户端
for sock in clients:
if sock != client_socket: # 不要将消息发送回发送者
sock.sendall(data)
except ConnectionResetError:
# 客户端强制关闭连接
print("Client disconnected unexpectedly.")
finally:
# 从列表中移除客户端套接字并关闭连接
clients.remove(client_socket)
client_socket.close()
def main():
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind((HOST, PORT))
server_socket.listen()
print(f"Server is listening on {HOST}:{PORT}")
while True:
client_socket, client_address = server_socket.accept()
print(f"Accepted connection from {client_address}")
# 为每个客户端创建一个新线程来处理请求
client_thread = threading.Thread(target=handle_client, args=(client_socket,))
client_thread.start()
except KeyboardInterrupt:
print("Server stopped by user interrupt.")
# 关闭所有客户端套接字
for sock in clients:
sock.close()
if __name__ == '__main__':
main()
Python
1
https://gitee.com/ByteBackpackerStudio/skychat.git
git@gitee.com:ByteBackpackerStudio/skychat.git
ByteBackpackerStudio
skychat
天聊 SkyChat
master

搜索帮助