【发布时间】:2011-04-28 16:55:46
【问题描述】:
在我的应用程序中,我发现我收到的数据比我预期的多 2 个字节。我不知道这 2 个字节是什么意思,因为在客户端我正在记录发送的字节并且我在服务器上接收到所有字节,但是在数据之后我仍然收到这 2 个字节,这会使我的程序崩溃。为什么?有什么想法吗?
编辑 1
在客户端
int sentBytes = send(socket, data, size, 0);
在服务器上
int receivedBytes = SOCKET_ERROR;
char *header = new char[8];
receivedBytes = recv(socket, header, 8, 0);
if (receivedBytes == 0 || receivedBytes == WSAECONNRESET)
{
...
}
else
{
size_t data_size = 0;
std::istringstream is(std::string(header, 8));
if (!(is >> std::hex >> data_size))
{
char *data = new char[data_size + 1];
data_size = recv(socket, data, data_size, 0);
}
}
我正在使用带有 WSAAsyncSelect 的 win32 消息循环
编辑 2
我正在使用前 8 个字节发送一个十六进制值,其中包含我应该在服务器上接收到的消息长度
【问题讨论】:
-
是否考虑了开始和结束传输(STX 和 ETX)字符?
-
@Heandel 添加了代码@Cole 抱歉,我不明白,你在说什么?
-
那么额外的两个字节 com 在哪里呢?收到的
data_size比预期的大两个?第二次调用recv()读取的数据比data_size中指定的多?这两个额外的字节出现在哪里? -
在您收到的数据中,您不期望的 2 个字符是什么?它们与您期望的数据相比处于什么位置?
-
@Cole @sth 我正确接收了我的所有数据,我可以使用它们并且它们没问题,在接收到我的数据的最新接收后两个字节(未知来源)。这是我不明白的,在调试模式下似乎不存在