【问题标题】:How do you send numbers over python sockets?你如何通过 python 套接字发送数字?
【发布时间】:2013-11-25 03:01:51
【问题描述】:

我尝试发送 4 个字符的填充数字,但是当我发送时

# sender
number = str(2).zfill(4)
sending_socket.send(number)



# receiver      
msg = receiving_socket.recv(4)
print msg

打印出来的味精是 11。

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    你有一些你没有向我们展示的东西:

    # sender
    >>> from socket import *
    >>> s=socket()
    >>> s.connect(('localhost',8000))
    >>> number=str(2).zfill(4)
    >>> s.send(number)
    
    # receiver
    >>> from socket import *
    >>> s=socket()
    >>> s.bind(('',8000))
    >>> s.listen(1)
    >>> c,a=s.accept()
    >>> c.recv(4)
    '0002'
    

    【讨论】:

    • 是的。我发送 1 过去,它可以工作,然后 2 出来是 11。是缓冲区问题吗?
    • TCP 是一种流协议,因此它没有消息边界。 sendrecv 也需要检查它们的返回值,因为它们可能不会发送或接收请求的金额。您必须设计一个考虑到这一点的协议,例如在数据中发送消息的大小。
    • 查看我的另一个答案作为示例:stackoverflow.com/a/9968240/235698。用一个演示问题的示例更新您的问题,我可以给出更好的答案。
    • 知道了,我要使用一个哨兵字节。感谢您的帮助!
    • 不客气!如果您发送的只是 4 字节格式的数字,只需确保您的消息正好是 4 字节也可以作为协议工作。
    猜你喜欢
    • 2021-02-03
    • 1970-01-01
    • 2014-09-01
    • 2014-02-09
    • 2021-09-13
    • 2014-08-16
    • 2016-11-19
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多