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

socket 进去mlock.c _unlock

2013-01-13 
socket 进入mlock.c _unlock我在使用socket建立连接后不断对一个页面发包,然后接受数据。由于接受的数据比

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;
}

大致就是这样了
}

热点排行