1

私のサーバーは、クライアントからのパケットを recv() し、それを表示する必要があります。
問題は、正しいデータが表示されないことです

コードは次のとおりです。

    iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
    if (iResult > 0) {
        for ( int i = 0; i < iResult; i++ ) {
            printf( "%02x ", buf[i] );
        }
        printf( "\n" );

    // return "cc cc cc cc cc cc cc cc cc cc"
    // correct return "0A 00 2C 01 29 00 0D 00 B4 01"

クライアントがサーバーに接続すると表示されますcc cc cc cc cc cc cc cc cc ccが、それは正しく
ありません0A 00 2C 01 29 00 0D 00 B4 01


アップデート

    #define DEFAULT_BUFLEN 512

    char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;

    iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
    if (iResult > 0) {
        for ( int i = 0; i < iResult; i++ ) {
            printf( "%02x ", recvbuf[i] );
        }
        printf( "\n" );

    // return "0A 00 2C 01 23 00 0c 00 ffffffB3 01"
    // correct return "0A 00 2C 01 23 00 0c 00 B3 01"

10 バイトしか受信していないにもかかわらず、パケットに余分な ffffff が含まれています。

4

1 に答える 1

1

データは現在正しいです。あなたが見ているのは、charあなたが渡している値printfがに昇格されたときの符号拡張ですint。を にキャストするcharと、unsigned char正しく表示されるはずです。

for ( int i = 0; i < iResult; i++ ) {
    printf( "%02x ", static_cast<unsigned char>( recvbuf[i] ) );
}
于 2012-11-29T06:14:58.330 に答える