0

我正在逐包从套接字数据包中读取数据并写入另一个缓冲区以组合所有数据。

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

取消注释已注释的代码可解决问题。当我将代码注释掉时,为什么会得到损坏的数据?

4

1 回答 1

0

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

如果您传递的是指针,而不是指向指针的指针,那么它会很奇怪,但它应该可以正常工作(因为它不会破坏任何东西)。然而,就像现在一样,它可能正在写它不应该写的地方。

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

于 2013-07-18T17:36:56.663 回答