100分求助!困扰一个月的问题,Socket->ReceiveBuf

meikeer 2007-04-26 04:05:00


接这个贴子:http://community.csdn.net/Expert/topic/5477/5477121.xml?temp=.4791223
求解决办法

typedef struct TFileData//发布包的长度
{
CHAR command[30];
CHAR password[20];
CHAR info[255];
int position;//当前传输的次数
short length;//当前传输的长度
int width;//文件的实际长度
CHAR filedata[4096];//文件包
}TFileData;
ServerSocket1->Socket->Connections[0]->SendBuf(&dp, sizeof(dp));//发送到客户端

这个结构是4416个字节



接收端处理如下:

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
TFileData dp;int tempi;
memset(&dp ,0x00,sizeof(dp));

char *buf;
buf = new unsigned char[sizeof(dp)];
int tsize=Socket->ReceiveBuf(buf, sizeof(dp));
while(tsize<sizeof(dp)){
if(Socket->ReceiveLength()>0)
tempi=Socket->ReceiveBuf(buf+tsize, sizeof(dp)-tsize);
if(tempi>0)
tsize+=tempi;
}
dp = (TFileData&)*buf;
}

对收到的包进行组合,包大部份时候收到的顺序是1,2,3,但是有的时候也许会3,2,1的顺序,这样数据就出错了,得不到原始的包,Client/ServerSocket控件ReceiveBuf的个方法,有解决办法吗?贴一下你们的代码,帮帮忙啊。。。。。
分不够可再加,只要问题能解决就行,谢谢!
...全文
440 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
meikeer 2007-04-28
  • 打赏
  • 举报
回复
结贴,我整明白了char *buf; 声明成全局变量就可以了
meikeer 2007-04-27
  • 打赏
  • 举报
回复
TO:songhtao(三十年孤独)
TCP用序列化方法具体要怎么实现?麻烦具体教教我!谢谢~
我不懂电脑 2007-04-27
  • 打赏
  • 举报
回复
建议用TCP用序列化方法传输对象。
huzhangyou 2007-04-26
  • 打赏
  • 举报
回复
我来解答一下这个问题:
1:使用UDP理论上局域网可以64k数据,但是万维网最好是小于1.5-3k数据
我在一个项目中使用UDP发送大于 5k的数据没有问题,当然是局域网,广域网我没有测试过那么大的,有一个做过的朋友告诉我应该是1700左右
另外你可以使用RTPLib,这是一个RTP包装协议,我的博客有介绍文章以及源代码
http://www.libing.net.cn/read.php/1028.htm
http://www.libing.net.cn/read.php/1029.htm
2:使用TCP,他应该会自己排序的,如果你觉得有问题,自己拆包,然后自己装包,自己使用list来存储,当所有的到达了,就组包,如果出现少包,可以丢弃,这要看具体的情形,比如是什么数据,音频丢些没有关系
meikeer 2007-04-26
  • 打赏
  • 举报
回复
我没有明白,整个包的结构已经是4416个字节了,还要做何定义?
he_Fly 2007-04-26
  • 打赏
  • 举报
回复
包里的数据格式定义一下长度
meikeer 2007-04-26
  • 打赏
  • 举报
回复
To:ahaozi(老公仔) 我这个是TCP协议的

To:ouygg(痞子酷) 一定要用UDP吗?UDP包长度超过1460的话也会发生拆包的问题吗?
痞子酷 2007-04-26
  • 打赏
  • 举报
回复
包太大啦,发送过程中拆包啦,最好采用报文协议,收到一个包时,知道要读取多大的数据
ahaozi 2007-04-26
  • 打赏
  • 举报
回复
UDP传数据,本来就需要自己处理分组、重组、排序的。
你在接收端定义一个状态数组,当收到包时就在相应位置设置标记。
最后判断那些没有收到,告诉发送方

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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