我正在用 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;
仍然没有返回任何字符串。只是“数据包是:”
最佳答案
您在该缓冲区中收到的字节可能是不可打印的,并且可能不是零终止的。在从 0
到 iResult - 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" );
关于C++ 服务器不显示数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618486/