C ++服务器不显示数据包

时间:2012-11-29 03:45:57

标签: c++ sockets winsock

我正在使用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;

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

1 个答案:

答案 0 :(得分: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" );