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

为什么Python中print打印socket解码内容时行首前缀内容被忽略

问题原因

你遇到的打印前缀丢失是因为收到的TCP报文中包含回车控制符\r(ASCII码0x0D):该控制符的作用是让终端光标回到当前行的最左侧,后续输出的内容会直接覆盖当前行已经打印的内容。
你实际收到的内容并非纯SYN字符串,大概率是前缀/后缀携带了\r或者\r\n行结束符。当执行打印f'[*] Received: {request.decode("utf-8")}'时,程序先打印前缀[*] Received: ,碰到\r后光标回到行首,再打印SYN就会把之前的前缀完全覆盖,最终输出行就只剩SYN。

验证方法

在handle_client函数中新增一行打印原始字节内容,即可确认控制符的存在:

def handle_client(socket):
    with socket as sock:
        request = sock.recv(1024)
        # 新增:打印原始字节的表示,\r会显示为\x0d
        print(repr(request))
        print(f'[*] Received: {request.decode("utf-8")}')
        sock.send(b'AKNOWLEDGEMENT')

修复方案

解码后先清理内容里的空白/控制字符即可:

# 方案1:删除首尾所有空白、换行、回车、制表符,适用大多数场景
content = request.decode('utf-8').strip()
print(f'[*] Received: {content}')

# 方案2:仅删除字符串中所有的回车符,保留其他内容
content = request.decode('utf-8').replace('\r', '')
print(f'[*] Received: {content}')

额外提示:你提供的代码片段中未引入socket模块,如果运行时报NameError: name 'socket' is not defined,在代码头部补充import socket即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:54:03