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

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

问题描述:

我是C/C++的新手。我正在使用以下代码将多条消息发送到我的服务器。 CONNECT消息,新行,然后是空终止符。但是当我发送这些消息时,他们正在转换某处。我收集了使用Wireshark交换的消息。由于我发送的内容和发送到服务器的内容有所不同,因此我的服务器无法正常响应。请帮忙。谢谢。在C/C++中通过套接字发送多个消息

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,但数组不是空终止的。使用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

+0

太好了。有用。谢谢。 – M99

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