如何在 python 套接字模块中接收 sendall
How to receive for sendall in python socket module
我对使用套接字还很陌生,这可能有一个我忽略的简单答案,但由于一个小时的苦恼没有产生结果,所以......到底是什么。
如何在 python 套接字模块中接收 .sendall()
?我的意思是如何在没有缓冲区的情况下从套接字接收数据?有没有像某种 conn.recvall()
函数这样的简单解决方案,或者我是否让它写出逻辑来做到这一点?如果我必须为它编写逻辑,那么我应该怎么做呢?我应该继续使用 .recv()
和一些任意的 buffint 还是我必须在发送之前将输入分成几段?哪个更有效,或者更好?有更聪明的方法吗?
谢谢
send
和 sendall
会将您的缓冲区分成几块以便通过网络发送。重要的是要记住 TCP 是一种流协议,而不是数据包协议。如果您发送 1,024 个字节,另一端可能会收到 1,024 个字节,或 256 之一和 768 之一,或 1,000 和 24 之一。接收方需要知道传输何时完成。有时它是固定缓冲区,有时你会先发送一个字节数,有时你使用一个特殊的终止字符,有时你等待超时。接收者只需要继续调用 .recv
直到他知道完成。
一些更高级别的 Python 软件包(例如 twisted
(我推荐))可以为您处理。
我对使用套接字还很陌生,这可能有一个我忽略的简单答案,但由于一个小时的苦恼没有产生结果,所以......到底是什么。
如何在 python 套接字模块中接收 .sendall()
?我的意思是如何在没有缓冲区的情况下从套接字接收数据?有没有像某种 conn.recvall()
函数这样的简单解决方案,或者我是否让它写出逻辑来做到这一点?如果我必须为它编写逻辑,那么我应该怎么做呢?我应该继续使用 .recv()
和一些任意的 buffint 还是我必须在发送之前将输入分成几段?哪个更有效,或者更好?有更聪明的方法吗?
谢谢
send
和 sendall
会将您的缓冲区分成几块以便通过网络发送。重要的是要记住 TCP 是一种流协议,而不是数据包协议。如果您发送 1,024 个字节,另一端可能会收到 1,024 个字节,或 256 之一和 768 之一,或 1,000 和 24 之一。接收方需要知道传输何时完成。有时它是固定缓冲区,有时你会先发送一个字节数,有时你使用一个特殊的终止字符,有时你等待超时。接收者只需要继续调用 .recv
直到他知道完成。
一些更高级别的 Python 软件包(例如 twisted
(我推荐))可以为您处理。