Winsock recv()返回不正确的数据

时间:2012-11-29 05:42:56

标签: c++ winsock

我的服务器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个字节。

1 个答案:

答案 0 :(得分:1)

现在数据正确。当您传递给char的{​​{1}}值提升为printf时,您看到的是签名延期。您可以将int转换为char,它应该正常显示。

unsigned char