- 论坛徽章:
- 0
|
原帖由 DNS_WXC 于 2008-1-24 21:54 发表 ![]()
服务器端通过send函数,发送数据给客户端。每10条记录发送一次(即每当发送缓冲区中有10条记录时,就调用一次send)。
在设置时,服务器端的发送缓冲区与客户端的接受缓冲区一样大小。
但是在客户端调用recv函数时,却始终得不到理想的结果。。
每次只能接受到前10条记录,而后边的却接受不到。。
我是这样实现的:
while ((num=recv(fd,recvbuf,MAXDATASIZE,0))!=-1){
recvbuf[num]='\0';
p = (struct test *)recvbuf;
for(i=0;;i++,p++)
{进行每条记录的输出;}
难道接受数据的时候循环有问题??
怎么实现??
1 为什么“每10条记录发送一次”,给自己找麻烦?如果最后一次发送不到10个记录怎么办?特殊处理?每条记录send一次不行吗?(别跟我扯什么效率)
2 你的是什么意思???你处理的究竟是结构体原始数据还是格式化串?
3 你能确保server发过来的数据是正确的吗?抓过包没有?
4 在流式套接字上直接传输结构体,你有没有正确处理字节序问题和结构体对齐问题?
5 设计通信协议的消息格式的时候,永远不要用int/long之类甚至char也不要用,应该用u_int32_t/u_int16_t/u_int8_t...
6 ......
劝你重新设计协议,返工吧。 |
|