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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux C语言 C/S程序,客户端发送的数据和服务器端接收到的数据不一样,求解相关的知识,希望对你有一定的参考价值。

估计你是用的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凑齐指定长度)。
参考技术A 估计你是用的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凑齐指定长度)。

以上是关于Linux C语言 C/S程序,客户端发送的数据和服务器端接收到的数据不一样,求解的主要内容,如果未能解决你的问题,请参考以下文章

求C++编写的自动升级程序C/S结构

C#winform开发的C/S结构的程序,怎样实现自动升级的功能!望高手指教!

C/C++语言编译生产可执行的二进制文件的过程??求大神详尽解释,

C/S架构 C#winform自动升级问题

C语言写的UDP客户端收不到包

C语言 Linux网络编程(C/S架构) 在线词典