Linux C语言 C⼀S程序,客户端发送的数据和服务器端接收到的数据不一样,求解

2024-12-04 06:56:04
推荐回答(2个)
回答1:

估计你是用的tcp socket,导致“videlord”网友说的情况:对于tcp socket,send与recv不是对等的,recv时只要缓冲有数据就会收上来。简单说就是你send 4次,比如分别为10 10 10 10字节,对端可以一次recv到这40字节数据,也可以recv 40次、每次1字节。


解决办法有两种:

  1. 改用udp socket,send/recv自然对等了

  2. 继续用tcp socket,自己进行数据分段:比如自行约定在数据前约定4个字节用于描述数据长度,这样发送时,send 4+33字节,send 4+35字节;接收时,先获取描述长度的4字节获得长度,再按照长度接收数据(可能需要多次recv凑齐指定长度)。

回答2:

message based socket or stream based socket?
recv的返回值多少?