100分求助!困扰一个月的问题,Socket->ReceiveBuf
接这个贴子: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的个方法,有解决办法吗?贴一下你们的代码,帮帮忙啊。。。。。
分不够可再加,只要问题能解决就行,谢谢!