C++ 通过C/C+中的套接字发送多条消息+;
我是C/C++新手。我正在使用以下代码向我的服务器发送多条消息。连接消息、新行和空终止符。但是当我发送这些信息时,它们在某个地方被转换了。我用Wireshark收集交换的信息。由于我发送的内容与真正发送到服务器的内容不同,因此服务器的响应不好。请帮忙。多谢各位 C代码(我正试图发送的内容):C++ 通过C/C+中的套接字发送多条消息+;,c++,c,C++,C,我是C/C++新手。我正在使用以下代码向我的服务器发送多条消息。连接消息、新行和空终止符。但是当我发送这些信息时,它们在某个地方被转换了。我用Wireshark收集交换的信息。由于我发送的内容与真正发送到服务器的内容不同,因此服务器的响应不好。请帮忙。多谢各位 C代码(我正试图发送的内容): sockfd = socket(AF_INET, SOCK_STREAM, 0); char peer0_0[] = {0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43,
sockfd = socket(AF_INET, SOCK_STREAM, 0);
char peer0_0[] = {0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x0d, 0x0a };
char peer0_1[] = {0x0d, 0x0a }; //NEW LINE
char peer0_2[] = {0x00, 0x0d, 0x0a }; //NULL TERM
n = send(sockfd,peer0_0,strlen(peer0_0),0);
n = send(sockfd,peer0_1,strlen(peer0_1),0);
n = send(sockfd,peer0_2,strlen(peer0_2),0);
我在Wireshark中看到的内容(转到服务器):
char peer0_0[] = {0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x0d, 0x0a };
char peer0_1[] = {0x0d, 0x0a, 0xc3, 0x5f, 0xff, 0x7f };
使用strlen,但数组不是以null结尾的。使用
sizeof
:
n = send(sockfd,peer0_0,sizeof(peer0_0),0);
n = send(sockfd,peer0_1,sizeof(peer0_1),0);
n = send(sockfd,peer0_2,sizeof(peer0_2),0);
strlen
不好,因为第三个数组(第一个字节)中有空终止符,所以strlen(peer0_2)
=0。使用strlen
,但数组不是空终止的。使用sizeof
:
n = send(sockfd,peer0_0,sizeof(peer0_0),0);
n = send(sockfd,peer0_1,sizeof(peer0_1),0);
n = send(sockfd,peer0_2,sizeof(peer0_2),0);
strlen
不好,因为第三个数组(第一个字节)中有空终止符,所以strlen(peer0_2)
=0。strlen仅当字符串的最后一个字符为“\0”(十六进制值0x00)时才返回正确的字符串长度。这里,字符串不是以NULL结尾的,这会导致发送垃圾值 strlen仅当字符串的最后一个字符为“\0”(即十六进制值0x00)时才返回字符串的正确长度。这里,字符串不是以NULL结尾的,这会导致发送垃圾值