一客户端程序采用多线程,每个线程都是单独的完成connect, send, recv,且是阻塞模式,现问题是客户端设置recv接收2K,而服务器返回的数据(大小不确定)如果小于2K,那会什么什么情况?客户端难道就一直等待吗?
解决方案 »
- VC2010中编译Sqlite3为静态库并带加密功能的方法。
- 100分问~关于提权的俩个问题-有经验的前辈来拿手-)-
- VC2003中,如何指定编译器?
- The ActiveX Control is not registered properly, or its type library version number is incorrect.
- 请教关于窗口的问题,在线等!急~
- 托管与非托管的混合编程
- 关于WIN API的LoadImage()函数
- 调查:一个在线Office文档编辑的开放源代码项目,有没有人感兴趣,有没有人参与
- 简单问题!!! 在VC++中使用ActiveX控件(如MSFlexGrid),为什么MSDN中没有CMSFlexGrid?怎么办?
- 如何调用别人的dll(100分)
- socket设计
- 谁有直接控制打印机的代码!
估计没有人会在程序里直接使用API函数,
都是经过打包的,
直接调用RECV( ),等于自己找死。
最起码也要用PEEK探测一下。
char buf[512];
string response = "";do {
bytes = recv(sock, buf, sizeof(buf)-1, 0);
if (bytes == SOCKET_ERROR) {
*errcode = WSAGetLastError();
break;
}
response.append(buf, bytes);
} while (bytes != 0);我用上面这个循环去recv,为何每次都会非法操作?
Microsoft Visual C++ Runtime Library
---------------------------
Runtime Error!Program: C:\Dev-Cpp\Examples\SofeeSpreader\Release\SofeeSpreader.exeThis application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
用那个循环去读取就会出现以上错误!
我的做法是每次发送数据时先发送长度,接收时根据长度判断是否接收完毕