SOCKET编程,接收数据不完整? 我用recv()接收数据,可是总是不完整,而如果我在前面加入Sleep(500)就没有问题了,请问这是怎么回事?有没有更好的解决办法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 tcp是流方式的,recv()返回接收到的字符数,你检查不够就再接收一次。 这是你的逻辑流程没有处理对你可以用Event(事件)+计算Byte来确保数据的接受 typedef struct{ DWORD dwDataLength; //告诉接受方接下来要发过来的数据大小 TCHAR szSynaMark[8]; //同步标志 ... }_PACKET1;把第一个数据包发过去然后等待对方确认收到了第一个数据包然后分多次或一次发要传输的数据包 typedef struct{ DWORD dwDataLength; //告诉接受方本次发过来的数据大小 TCHAR szSynaMark[8]; //同步标志 ... TCHAR szData[DATA_SIZE]; //数据 }_PACKET2接受的时候用dwDataLength来判断是否收完,如果数据很大那么收到一定程度就可以用一个线程去处理收到的数据. 试试WasyncSelectEVENT,在这个函数中可以指定自己感兴趣的下一事件,可以指定FD_READ.并自定义消息响应函数.这样当缓冲区中有数据就回通知你,直到没数据.#defin wm_myread wm_user+101//自定义消息afx_msg lresult onmyread(wparam,lparam);//自定义消息响应函数on_message(wm_myread,onmyread);//自己插入消息映射//连接成功后,调用wsaynseletnextevent(hwnd,wm_myread,0,0,fd_read);afx_msg lresult onmyread(wparam,lparam){读取数据} 奇怪,this指针变成2了。 诚心请教 如何在MFC下 调用资源图标! 厚着脸皮再发一次帖子,人都快疯了! 问一个未入门的问题 请问一个简单问题: pragma comment(linker ,"/ section:.JOE,rws ") 是什么意思呢? 如何写出正确的钩子函数? 请教CButton问题! 看XML文件?? 有谁知道OICQ消息的格式? 0X00000718 请大虾讲一下RSA加密算法的的入口参数? 什么叫虚基类 怎样区分左、右Ctrl、Alt、Shift键按下?
你可以用Event(事件)+计算Byte来确保数据的接受 typedef struct{
DWORD dwDataLength; //告诉接受方接下来要发过来的数据大小
TCHAR szSynaMark[8]; //同步标志
...
}_PACKET1;
把第一个数据包发过去然后等待对方确认收到了第一个数据包
然后分多次或一次发要传输的数据包
typedef struct{
DWORD dwDataLength; //告诉接受方本次发过来的数据大小
TCHAR szSynaMark[8]; //同步标志
...
TCHAR szData[DATA_SIZE]; //数据
}_PACKET2接受的时候用dwDataLength来判断是否收完,如果数据很大
那么收到一定程度就可以用一个线程去处理收到的数据.
#defin wm_myread wm_user+101//自定义消息afx_msg lresult onmyread(wparam,lparam);//自定义消息响应函数
on_message(wm_myread,onmyread);//自己插入消息映射//连接成功后,调用
wsaynseletnextevent(hwnd,wm_myread,0,0,fd_read);
afx_msg lresult onmyread(wparam,lparam)
{读取数据
}