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"

现在数据包上有额外的 ffffff,即使我只有 10 个字节。

4

1 回答 1

1

现在数据是正确的。当char您传递给的值printf提升为int. 您可以将其char转换为 anunsigned char并且它应该正确显示。

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