1

私は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;

それでも文字列は返されません。ただ「パケットは:」

4

1 に答える 1

1

そのバッファで受け取るバイトは、印刷できない可能性があり、ゼロで終了しない可能性があります。0からへのループで、たとえば16進形式の整数としてそれらを出力します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" );
于 2012-11-29T03:55:55.940 に答える