如果我有两个连接在一起的套接字(AF_INET
,SOCK_STREAM
,IPPROTO_IPV4
),并且我在一端发出了32字节的send()
,则{{1 }}在另一端读取数据的操作是否保证在单个调用中返回相同数量的数据?
答案 0 :(得分:2)
不,没有这样的保证。实际上,默认情况下,多个连续的短写入将合并为一个网络数据包,该数据包将在单个<label name>.config(text="<new text>" + str(<variable name>))
中接收。 (这称为Nagle's algorithm。)
如果要以特定方式对要传输的数据进行构架,则需要包括数据以将该成帧定义为要传输的数据的一部分。一种简单的方法是用特殊字符(例如换行符或空字节)对数据进行定界;另一个是在每个帧的数据之前发送其长度。 (还有许多其他方法来构造数据;这些只是开始的一些想法。)