请交一个关于Socket的编程问题?高分相送!!!

Happyledian 2002-01-14 08:56:42
对方发送2808个字节(88个数据点),而我却只能收到1348个字节。双方的结构体定义如下:
#define MAX_NODECOUNT 100

struct TReceiverNodeDefintion{
char ValueTime[20];
int NodeID; //4
float Data; //4
};

struct TReceiverBuffer{
int Reserver;
int NodeCount;
struct TReceiverNodeDefintion RecNode[MAX_NODECOUNT];
};

我用
int RecCount = sizeof( struct TReceiverBuffer );
n = read(infd, &RecBuf, RecCount);
接收数据。请各位高手指点迷津,一定高分相送!!!
...全文
117 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
macau 2002-01-17
  • 打赏
  • 举报
回复
能否一次少发送一些数据?可能接收缓冲区大小有限。
walkonthesky 2002-01-17
  • 打赏
  • 举报
回复
char *好象没有什么问题
ylb_and_xy 2002-01-16
  • 打赏
  • 举报
回复
like as wwwunix(木易) 
wwwunix 2002-01-15
  • 打赏
  • 举报
回复
一个建议:读socket数据时,最好用流,不要用struct
jyc_nj 2002-01-15
  • 打赏
  • 举报
回复
这只是个简单的模型,你可能,多次调用,读到你所要的所有数据,或读到连接关闭。然后再作处理。
Happyledian 2002-01-15
  • 打赏
  • 举报
回复
如果对方先后两次发送88个点和60个点的数据,那楼上的方法能有效吗。首先我能收到100个点的字节,但其中有部分信息可能不正确。因为我是用结构体接收的。大家看看我的看法正不正确。
Happyledian 2002-01-15
  • 打赏
  • 举报
回复
如果对方连续
jyc_nj 2002-01-15
  • 打赏
  • 举报
回复
char *p;
int count;

p = &RecBuf;
count = RecCount;
do{
n = read(infd, p,count);
if( n < 0 ){
//errexit
}
if( n == 0 ){
// recieve all data
break;
}
p += n;
count -= n;
if( count <= 0 ){
// have no buffer
break;
}
}
lurenfu 2002-01-15
  • 打赏
  • 举报
回复
TCP?UDP?
ly60269 2002-01-14
  • 打赏
  • 举报
回复
这是很正常的, 你应该不停地接收直到全部收到为止

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧