在C / C ++中通过套接字发送多条消息

时间:2011-11-01 18:22:27

标签: c++ c

我是C / C ++的新手。我使用以下代码将多条消息发送到我的服务器。 CONNECT消息,新行,然后是空终止符。但是当我发送这些消息时,它们会在某处转换。我收集了使用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 };

2 个答案:

答案 0 :(得分:5)

您使用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。

答案 1 :(得分:1)

只有当字符串的最后一个字符为'\ 0'(十六进制值为0x00)时,strlen才会返回正确的字符串长度。这里,字符串不是NULL终止,这导致发送垃圾值。