32和64位操作系统之间的RECV()行为差异



我已经编写了一个服务器 - 委托程序,我想问:Recv()函数的行为在32和64位操作系统之间有任何区别。

我之所以问这个,是因为我在64位笔记本电脑上同时运行了服务器和客户端,并且一切正常。我以这种方式调用recv(): while((tmp = recv(client_sock,rec_msg,256,0))>0),并且如预期的那样,例如,如果我有3个字符串可以从客户端发送,在服务器部件中,它将输入3次并打印正确的结果。

当我在32位Debian机器上完全相同的程序运行时,似乎出于某些未知原因,如果我从客户端发送3个字符串,它将仅一次进入服务器中的wire loop,然后将3个字符串作为一个接收到一个。

我已经使用了打印语句,发现它一次进入WALE循环并接收所有缓冲区,尽管在客户端部件中,在循环中按预期输入了3次循环,并在3个不同的时间内发送了3个字符串。我找不到它在64位上正常工作而无法在32位工作的逻辑原因,这就是为什么我问这个问题。

事先感谢您的时间和帮助。

如果这是流插座,则没有固有的消息边界,并且发送和接收到的消息之间没有相关性。recv()可以返回消息的一部分,整个消息或多个消息;所有保证的就是按照发送的顺序收到字节。

您看到的差异可能只是由于两台机器之间的速度差异。32位机器较慢,因此在检查网络上可用的数据所需的时间时,所有3个数据包都已经到达。但是,更快的64位机器在第二个数据包中处理收到的数据。

最新更新