2011-04-28 48 views
1

我的应用程序中发现我收到的字节数超过了我的预期。我不知道这2个字节意味着什么,因为在客户机中我记录了发送的字节,并且我收到了服务器上的所有数据,但是在数据发送之后,我仍然收到了这两个字节导致程序崩溃。为什么?任何想法?发送的字节数多于我应该通过套接字接收到的字节数

客户端

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

我使用的win32消息循环与WSAAsyncSelect

EDIT 2在服务器上EDIT 1

我使用的是前8个字节发送包含该消息的长度,我应该接受在服务器上的十六进制值

+5

发表一些代码,我失去了我的水晶球。 – 2011-04-28 16:56:53

+0

开始和结束传输(STX和ETX)字符被占? – 2011-04-28 17:02:22

+0

@Heandel @Cole对不起,我不明白,你在说什么? – Stefano 2011-04-28 17:03:11

回答

2
  1. 你不检查你有正好上8个字节第一次阅读。它可能更少。
  2. 我希望这是TCP,因为使用UDP,您将读取第二个recv()下一个数据包。
+0

确定它是TCP。现在我已经在主要添加如果条件而不是检查数据大小是否小于8,它不会崩溃了,无论如何,我不明白为什么有这2个字节不会记录在日志中客户(发件人) – Stefano 2011-04-28 17:22:20

相关问题