解决方案 »
- ::TransparentBlt使用方法不对?????
- 多个线程在固定的时间内轮流进行切换,怎样进行实现?
- MySQL中C API函数问题
- 参数是char *类型,而我想传int类型的时候strlen(buf)就会出错.有什么办法没?
- 变量得值怎么改变得
- 熟悉WTL的朋友请帮忙
- Release版的程序老是莫明其妙死掉???
- 怎么样把cstring转换成char数组?急!!!!!!!
- 怎样控制显示窗口的大小?
- 关于cvPyrMeanShiftFiltering()的使用
- 分享一个刚刚写的小工具,测试网速和延迟的。。。
- 求助:C++ 如何解析 Thu, 8 Mar 2012 23:13:06 +0800 (CST) 这种时间串
觉得是可能内存分配的问题, 求高手解答啊!!
A blocking operation was interrupted by a call to WSACancelBlockingCall.
函数调用中断。该错误表明由于对WSACancelBlockingCall的调用,造成了一次调用被强行中断。2. socket数据缓冲区的大小有限,所以很多时候一次recv调用并不将我们需要的数据接收完成,所
以需要多次调用,但这时候需要注意的问题,你的BUFFER的地址变化,以及BUFFER大小的变化
/*
* 循环接收数据
* SOCKET s [in]: socket
* char* pszBuf [in/out]: 接收数据的BUFF
* int iLen [in]: BUFF的长度
*/
BOOL Receive(SOCKET s, char* pszBuf, int iLen)
{
int iByte = 0;
int iByteSum = 0; while(iByte > 0)
{
iByte = recv(s, pszBuff+iByteSum, iLen, 0);
if(SOCKET_ERROR == iByte)
{
printf("err no: %d\n", WSAGetLastError());
return FALSE;
} iByteSum = iByteSum+iByte;
iLen = iLen-iByte;
}
return TRUE;
}
写个Sleep(0)替代CString试试看。
猜想原因可能是连接方是多个线程同时连接服务器方造成(我的实例工程中连接计算程序是两个线程独立连接服务端相同的端口,进行独立的数据请求操作)