首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

今天碰到的TCP通信中的一个有关问题,求教

2012-03-06 
今天碰到的TCP通信中的一个问题,求教客户端的连续两个send时,第2个send可能会出问题,服务端接受不到正确的

今天碰到的TCP通信中的一个问题,求教
客户端的连续两个send时,第2个send可能会出问题,服务端接受不到正确的信息,必须调用Sleep()。有没有别的方法?就像文件操作有fflush()之类的?

这是服务器端的:
char   buffer[1024];//接受缓冲区

SOCKET   client=(SOCKET)pvParam;
recv(client,buffer,64,0);//接受文件长度
ULONGLONG   fileLen=_atoi64(buffer);

char   fileName[255];
recv(client,fileName,255,0);//接受文件名

这是客户端:
char   fileLenBuf[64];
_i64toa(fileLen,fileLenBuf,10);     //把文件长度转换为字符串
send(server,fileLenBuf,strlen(fileLenBuf)+1,0);   //发送文件长度

CString   str=fileDlg.GetFileName();
char   *fileName=(char*)(LPCTSTR)str;
Sleep(50);     //wait   必须要SLEEP吗?
send(server,fileName,strlen(fileName)+1,0);//发送文件名
Sleep(50);     //wait

问题表现为:不加Sleep()时,服务器端接受不到正确的文件名。
加了Sleep()后一切正常。。。。
求教,求教。。

[解决办法]
不sleep,第一次recv就把两次send的都收到了。你跟踪看看,第一次收的结果。
正确的做法是不用sleep的,但收发双方要有协议。不能假定一次send对应一次recv。

[解决办法]
楼上的正解,双方可以采用固定包大小的方法或利用首字节代表本次包的大小,我就是这么做的

热点排行