在以下情况下从套接字读取数据已损坏?
Posted
技术标签:
【中文标题】在以下情况下从套接字读取数据已损坏?【英文标题】:Reading the data from socket is currupted in following condition? 【发布时间】:2013-07-18 17:19:24 【问题描述】:我正在逐包读取套接字数据包并写入另一个缓冲区以组合所有数据。
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);
取消注释已注释的代码可解决问题。为什么我在注释掉代码时会收到损坏的数据?
【问题讨论】:
你确定BufferRead
是合法的吗?您是否收到来自WSARecv
的错误?你WSAInitialize
(或其他)吗?
【参考方案1】:
WSARecv 的第四个参数应该是一个指向接收到的字节数的指针。但是,您将指针的地址传递给缓冲区的长度。
如果你传递的是指针,而不是指向指针的指针,那么它会很奇怪,但它应该可以正常工作(因为它不会破坏任何东西)。然而,就像现在一样,它可能会写在不应该写的地方。
简而言之:检查并修复第四个参数。
【讨论】:
以上是关于在以下情况下从套接字读取数据已损坏?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用临时文件的情况下从 Java 中的嵌套 zip 文件中读取数据?