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

Socket传输int对象接收后为b' ',如何保持其int类型?

解决Socket传输int对象后接收异常的问题

首先得明确一个核心点:Socket的send()方法只接受字节类对象(bytes-like),你直接传入int类型的code=123,实际运行时会触发TypeError(不信你跑一遍原代码试试),你提到接收端得到b' ',大概率是异常导致的错误输出,或者代码执行时出了其他问题。

要实现int的正确传输,我们需要先把int转换成字节流,接收端再把字节流转回int,下面给你两种常用的解决方案:

方法一:用struct模块进行二进制打包(推荐用于数值传输)

这种方式是专业的二进制数据传输方案,能精准控制字节长度和字节序,适合传输数值类型,效率更高。

修正后的客户端代码

import socket
import struct

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
code = 123
try:
    sock.connect(('192.168.1.10', 12345))
    # 把int打包成4字节的大端字节流(!i表示网络字节序的int)
    packed_data = struct.pack('!i', code)
    sock.send(packed_data)
    print(sock.recv(1024).decode('ascii'))
finally:
    sock.close()

对应的服务端接收代码

import socket
import struct

server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(('0.0.0.0', 12345))
server_sock.listen(1)

conn, addr = server_sock.accept()
try:
    # 接收4字节数据(和打包时的格式对应)
    data = conn.recv(4)
    if data:
        # 解包回int,注意unpack返回的是元组,取第一个元素
        code = struct.unpack('!i', data)[0]
        print(f"收到的int值: {code}")
        conn.send(b"Received the integer successfully")
finally:
    conn.close()
    server_sock.close()

方法二:转成字符串再编码(适合简单场景)

如果不需要高性能,这种方式更直观,代码也更简单——把int转成字符串后编码成字节传输,接收端再解码转成int。

修正后的客户端代码

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
code = 123
try:
    sock.connect(('192.168.1.10', 12345))
    # 把int转字符串,再编码为ASCII字节
    sock.send(str(code).encode('ascii'))
    print(sock.recv(1024).decode('ascii'))
finally:
    sock.close()

对应的服务端接收代码

import socket

server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind(('0.0.0.0', 12345))
server_sock.listen(1)

conn, addr = server_sock.accept()
try:
    data = conn.recv(1024).decode('ascii')
    if data:
        # 把解码后的字符串转回int
        code = int(data)
        print(f"收到的int值: {code}")
        conn.send(b"Received the integer successfully")
finally:
    conn.close()
    server_sock.close()

简单总结下:

  • 用struct的方式适合需要精确控制数据格式的场景,比如跨语言传输数值;
  • 字符串转换的方式更适合快速实现,代码易读性高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:02:51