C++ 在以下情况下,从套接字读取数据是否中断?

C++ 在以下情况下,从套接字读取数据是否中断?,c++,c,sockets,visual-c++,mfc,C++,C,Sockets,Visual C++,Mfc,我从一个套接字数据包一个包地读取数据,然后写入另一个缓冲区以合并所有数据 BOOL _ReadPacket(PBYTE BufferRead, DWORD &Length, SOCKET Socket) { WSABUF Buffer; DWORD Flags = 0; int Result = 0; FILE *file; Buffer.buf = (char *)BufferRead; Buffer.len = Length;

我从一个套接字数据包一个包地读取数据,然后写入另一个缓冲区以合并所有数据

BOOL _ReadPacket(PBYTE BufferRead, DWORD &Length, SOCKET Socket)
{
    WSABUF Buffer;
    DWORD Flags = 0;
    int Result = 0;
    FILE *file;
    Buffer.buf = (char *)BufferRead;
    Buffer.len = Length;
    Flags = 0;
    Result = WSARecv(Socket, &Buffer, 1, &Length, &Flags, NULL, NULL);

    // if ((file=fopen("D:/test/test1/test1.txt","a+") ) != NULL)
    //{ 
    //UINT val = Buffer.len;
    //fprintf(file, "%d\n", val);
    //
    //fflush(file);
    //fclose(file);
    //}
    return(Result != SOCKET_ERROR);
}

取消注释注释注释代码可以修复此问题。为什么在注释掉代码时会得到损坏的数据?

WSARecv的第四个参数应该是指向接收字节数的指针。但是,您正在将指针的地址传递给缓冲区的长度

如果您传递的是指针,而不是指向指针的指针,那么这会很奇怪,但应该可以正常工作(因为它不会损坏任何东西)。然而,就目前而言,它可能是在写不应该写的东西


简而言之:检查并修复第四个参数

您确定
BufferRead
合法吗?您是否从
WSARecv
中获得错误?您是否初始化了(或其他什么)?