【问题标题】:C++ Server not displaying the packetC++ 服务器不显示数据包
【发布时间】:2012-11-29 03:45:56
【问题描述】:

我正在用 C++ winsock 制作服务器
现在我正在尝试调试并查看客户端发送的数据包。

这是我的代码

int iSendResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;

(...)

iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
    cout << "The packet is: " << hex << recvbuf << endl;

但在客户端连接后,控制台上的显示只是:

The packet is:

什么都不显示。我错过了什么?

如果我这样做:

int iSendResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;

(...)

iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
    cout << "The packet size: " << iResult << endl;
//result is "The packet size: 10"

现在我想看看那个数据包是什么。


更新

我试过了:

iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
    string packet = recvbuf;
    cout << "The packet is: " << packet.c_str() << endl;

仍然没有返回任何字符串。只是“数据包是:”

【问题讨论】:

    标签: c++ sockets winsock


    【解决方案1】:

    您在该缓冲区中接收到的字节可能是不可打印的,并且可能不是以零结尾的。在从0iResult - 1 的循环中,将它们打印为整数,例如十六进制格式。

    编辑0:

    重要的是您需要打印确切的字节数。像下面这样简单的事情就可以了(unsigned char 以避免值的符号扩展大于127):

    unsigned char buf[BSIZE];
    // ... get data of size iResult
    for ( int i = 0; i < iResult; i++ ) {
        printf( "%02x ", buf[i] );
    }
    printf( "\n" );
    

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 2017-03-10
      • 2021-04-25
      • 2013-08-30
      • 2016-08-31
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多