You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Socket服务端接收客户端消息并按指定格式展示内容?

Socket服务端按指定格式打印客户端消息解决方案

核心修改说明

  • 修正客户端收发逻辑冲突问题,拆分消息监听和消息发送两个独立逻辑
  • 客户端发送消息时按照要求拼接{name} send message: {content}格式后再上传到服务端
  • 服务端新增异常处理,避免客户端异常断开时服务端崩溃,接收消息后直接解码打印即可

修改后完整代码

服务端代码

import threading
import socket

HOST = '127.0.0.1'
PORT = 8888

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))

server.listen(15)
print(f'Server {HOST}:{PORT} start.')

users = []

def send_all(data):
    for user in users:
        try:
            user.send(data)
        except:
            users.remove(user)
            user.close()

def listen_user(user):
    print('新客户端接入,开始监听消息')
    while True:
        try:
            data = user.recv(1024)
            if not data:
                users.remove(user)
                user.close()
                break
            # 客户端已按要求拼接好格式,直接解码打印
            print(data.decode('utf-8'))
            send_all(data)
        except:
            users.remove(user)
            user.close()
            break

def start_server():
    while True:
        user_socket, addr = server.accept()
        users.append(user_socket)
        potok_info = threading.Thread(target=listen_user, args=(user_socket,), daemon=True)
        potok_info.start()


if __name__ == '__main__':
    start_server()

客户端代码

import socket
import threading
import os

HOST = '127.0.0.1'
PORT = 8888

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT))

# 仅负责监听服务端转发的其他用户消息
def listen_message():
    while True:
        try:
            data = client.recv(1024)
            if not data:
                break
            print(f'\n{data.decode("utf-8")}')
        except:
            print('与服务端断开连接')
            client.close()
            break

def send_server():
    print('Enter name: ')
    name = input().strip()
    # 启动后台消息监听线程
    listen_thread = threading.Thread(target=listen_message, daemon=True)
    listen_thread.start()
    os.system('clear')
    print('***** Welcome in Security Chat. *****')
    while True:
        try:
            input_msg = input('you: ').strip()
            if input_msg:
                # 按要求拼接消息格式后发送
                send_msg = f'{name} send message: {input_msg}'
                client.send(send_msg.encode('utf-8'))
        except:
            print('消息发送失败')
            client.close()
            break

if __name__ == '__main__':
    os.system('clear')
    send_server()

内容的提问来源于stack exchange,提问作者Sap2ch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:18:00