在C/ c++中通过套接字发送多个消息
Sending multiple message over a socket in 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 };
您使用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仅在字符串的最后一个字符为' '(即十六进制值0x00)时返回字符串的正确长度。在这里,字符串不是NULL终止的,这会导致发送垃圾值。
相关文章:
- 非更新套接字消息
- 如何在C++中创建特定大小的消息以通过UDP套接字发送?
- 发送和十六进制消息时套接字代码C++问题
- 如何使用阻止套接字 API 添加消息发送操作 (smtp) 的进度?
- 当我使用套接字代码发送第二条消息时,我有一个"sendto() Invalid argument"
- 多线程套接字编程服务器仅从 1 个客户端线程获取消息
- C# UDP 套接字无法接收消息
- 套接字记录未读取任何消息
- 通过套接字C++从设备接收消息
- Datagram套接字服务器未从客户端接收消息
- C/C++ 中的套接字编程 - 接收由 typedef 结构定义的消息
- 如何正确读取套接字消息(C++)
- 套接字消息头构建
- 套接字Java到C++-消息的长度总是8192个字符
- 如何使用套接字实现服务器客户端编程,在套接字中服务器向客户端发送消息而不从客户端获取请求
- C++中的多线程,从套接字接收消息
- C++套接字接收混合消息
- C++套接字客户端/服务器简单消息发送器
- 如何在套接字编程中发送长度大于缓冲区的消息
- 套接字编程中的客户端到客户端消息传递