【问题标题】:How to receive for sendall in python socket module如何在 python 套接字模块中接收 sendall
【发布时间】:2021-10-11 18:25:52
【问题描述】:

我对使用套接字还很陌生,这可能会有一个我忽略的简单答案,但是由于一个小时的痛苦没有产生结果,所以......到底是什么。

如何在 python 套接字模块中接收.sendall()?我的意思是我如何从没有缓冲区的套接字接收数据?有没有一个简单的解决方案,比如某种conn.recvall() 函数,或者我让它写出逻辑来做到这一点?如果我必须为它编写逻辑,那么我应该怎么做呢?我应该继续使用带有一些任意缓冲区的.recv(),还是必须在发送之前将输入分成段?哪个更有效率,或者更好?有没有更聪明的方法?

谢谢

【问题讨论】:

    标签: python sockets python-sockets


    【解决方案1】:

    send 和 sendall 将把你的缓冲区切成小块以便通过网络发送。重要的是要记住 TCP 是流协议,而不是数据包协议。如果您发送 1,024 字节,则另一端可能会以 1,024 字节接收,或者作为 256 和 768 之一,或 1,000 和 24 之一。接收方需要知道传输何时完成。有时它是固定缓冲区,有时你会先发送一个字节数,有时你使用特殊的终止字符,有时你等待超时。接收者只需要继续调用.recv,直到他知道它完成了。

    一些更高级别的 Python 包(如 twisted(我推荐))可以为您处理。

    【讨论】:

    • 我不知道为什么我没有想到发送 buffint 来设置下一个 recv 的缓冲区,代码现在完美运行,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多