Linux C语言 C/S程序,客户端发送的数据和服务器端接收到的数据不一样,求解
TCP长连接。客户端开了40byte的buffer:charsendbuff[40];循环交替发送33和35byte的数据:sendnum=send(socketfd,s...
TCP长连接。
客户端开了40byte的buffer:char sendbuff[40];
循环交替发送33和35byte的数据:sendnum = send(socketfd, sendbuff, sendsize, 0);
sendsize交替为33和35.
服务器端同样40byte的buffer:char recvbuff[40];
一直循环接收数据:recvnum = recv(socketfd, recvbuff, sizeof(recvbuff), 0);
但是接收到的字节数并不是期望的交替33和35,而是乱的,从而导致数据全部乱掉。
log文件中可以看到后一条数据的前几个字节跑到前一条数据的尾部了。
仔细研究了recv()和send()函数,发现send()没有问题,问题出在recv()上。
是不是因为发的太快,收的太慢,没有同步?
socket通信是如何控制发送和接收缓存的大小的?
有没有办法在不返信的前提下解决这一问题?
急求大神解答,分太少了,全拿了。 展开
客户端开了40byte的buffer:char sendbuff[40];
循环交替发送33和35byte的数据:sendnum = send(socketfd, sendbuff, sendsize, 0);
sendsize交替为33和35.
服务器端同样40byte的buffer:char recvbuff[40];
一直循环接收数据:recvnum = recv(socketfd, recvbuff, sizeof(recvbuff), 0);
但是接收到的字节数并不是期望的交替33和35,而是乱的,从而导致数据全部乱掉。
log文件中可以看到后一条数据的前几个字节跑到前一条数据的尾部了。
仔细研究了recv()和send()函数,发现send()没有问题,问题出在recv()上。
是不是因为发的太快,收的太慢,没有同步?
socket通信是如何控制发送和接收缓存的大小的?
有没有办法在不返信的前提下解决这一问题?
急求大神解答,分太少了,全拿了。 展开
2个回答
展开全部
估计你是用的tcp socket,导致“videlord”网友说的情况:对于tcp socket,send与recv不是对等的,recv时只要缓冲有数据就会收上来。简单说就是你send 4次,比如分别为10 10 10 10字节,对端可以一次recv到这40字节数据,也可以recv 40次、每次1字节。
解决办法有两种:
改用udp socket,send/recv自然对等了
继续用tcp socket,自己进行数据分段:比如自行约定在数据前约定4个字节用于描述数据长度,这样发送时,send 4+33字节,send 4+35字节;接收时,先获取描述长度的4字节获得长度,再按照长度接收数据(可能需要多次recv凑齐指定长度)。
展开全部
message based socket or stream based socket?
recv的返回值多少?
recv的返回值多少?
追问
本人小白,不懂message based socket ,就是发送字节流,感觉应该是stream based socket。recv的返回值是乱的 40,9,11,13,……
追答
查看你socket的定义
如果stream based, message boundary是被忽略的,只要数据有了,就会返回给用户;所以你的recv会接受所有available data.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询