socket 进入mlock.c _unlock
我在使用socket建立连接后不断对一个页面发包,然后接受数据。
由于接受的数据比较大,我分了好几次接收。
单步调试的时候,没有问题。
但是直接运行的时候,由于程序执行的速度很快,我必须在recv之后sleep(10); 才能接受数据。
但是即使这样,在接收数据的过程中,程序会异常终止,调试后进入mlock.c 停在_unlock里面出不来。
不知道是为什么?还请大家指教。谢谢。
[解决办法]
recv本身是阻塞模式的,这部分可以这样写:
int nRecvLen = 0; while ( nRecvLen < Length ) { int len = recv(LinkSocket, WriteBuffer + nRecvLen, 1024, 0); if ( len == 0 ) break; nRecvLen += len; } WriteFile(hPhoto, WriteBuffer, nRecvLen, &dwWritten, NULL); CloseHandle(hPhoto);
[解决办法]
recv(LinkSocket, (char*)recvbuffer, 1024, 0);
请注意,recv的返回值的意义,你期望读取1024,实际返回可能只有1000,所以,你必须根据recv的返回值来确定,实际读取了多少数据
你的问题就出在这里了
给你写个大致的模板
bmplen=2000;//假设已经接受到图片的长度,假设为2000
int recvlen=0;
while(recv<2000)
{
int ret=recv(......);
memcpy(WriteBuffer+recvlen,buffer,ret);
recvlen=recvlen+ret;
}
大致就是这样了
}