gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:21 24 4
gpt4 key购买 nike

我的服务器接收来自客户端的数据包并且必须显示它。
问题是它没有显示正确的数据

代码如下:

    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 个字节。

最佳答案

数据现在是正确的。当您传递给 printfchar 值被提升为 int 时,您看到的是符号扩展。您可以将 char 转换为 unsigned char,它应该可以正确显示。

for ( int i = 0; i < iResult; i++ ) {
printf( "%02x ", static_cast<unsigned char>( recvbuf[i] ) );
}

关于c++ - Winsock recv() 返回不正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13619570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com