通过套接字发送的字节比我应该接收的字节多
More bytes sent than what I should receive via socket
在我的应用程序中,我发现我收到的比我预期的多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个字节来发送一个十六进制值,该值包含我应该在服务器上接收的消息的长度
- 你没有检查你在第一次读取时得到的恰好是8个字节。可能更少。
- 我希望这是TCP,因为使用UDP,您将读取第二个
recv()
的下一个数据包。
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 我应该删除矢量<short>吗?
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 我应该在锁定TBitmap画布后解锁它吗
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 我应该避免多重实现继承吗
- 为了方便起见,我应该避免公开私有字段变量吗
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 违反const正确性:我应该现实地期待什么问题
- 我应该如何表示我拥有的连续元素序列?
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 如果Malloc无法分配X字节,我应该使用Realloc还是再次使用Malloc?C++
- 我应该考虑网络字节订单吗?
- C 我应该如何返回字节数组
- 我应该如何将字节数组缓冲区传递给写文件
- 通过套接字发送的字节比我应该接收的字节多