Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过C/C+中的套接字发送多条消息+;_C++_C - Fatal编程技术网

C++ 通过C/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,

我是C/C++新手。我正在使用以下代码向我的服务器发送多条消息。连接消息、新行和空终止符。但是当我发送这些信息时,它们在某个地方被转换了。我用Wireshark收集交换的信息。由于我发送的内容与真正发送到服务器的内容不同,因此服务器的响应不好。请帮忙。多谢各位

C代码(我正试图发送的内容):

    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结尾的,这会导致发送垃圾值