[英]Reading the data from socket is currupted in following condition?
我正在逐个数据包地从套接字数据包中读取数据,然后写入另一个缓冲区以合并所有数据。
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的第四个参数应该是一个指向接收到的字节数的指针。 但是,您正在将指针的地址传递到缓冲区的长度。
如果您传递的是指针,而不是指针的指针,那将很奇怪,但是应该可以正常工作(因为它不会破坏任何东西)。 但是,到现在为止,它可能正在编写不应在的位置。
简而言之:检查并修复第四个参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.