c++通过套接字发送字符串
C++ sending string over socket
我正在做一个小型的客户端/服务器项目,作为c++课程的最终项目。我们给了一些类来处理通信(使用sys/socket.h),我们基本上可以做connection->send(byte)
来发送一个字节的数据。
假设我有一个要发送的字符串。如何确保从客户端发送到服务器时,"a"被解释为"a",反之亦然?由于标准没有说明char默认为unsigned或signed,所以我不知道如何处理它。
我有一些想法,我可以减去std::numeric_limits<char>::min()
两端,但我不确定这是一个好
TCP和UDP都不关心字符串的编码。它总是被解释为一个字节数组。因此,为了确保您的字符串被正确解释,服务器和客户端都必须同意一个共同的编码。
在您的情况下,我将简单地使用std::string的c_str()
方法来发送字符串并通过将接收到的数据解释为const char*
(对于ASCII字符串)来分配字符串。只要客户端应用程序和服务器应用程序使用相同的字符串库,这应该就可以工作。
要验证您的通信,您应该使用网络嗅探器。Wireshark是一个很好的工具。
如果嗅探器捕获你的以太网数据包并说它有一个'a',你可以非常确定你已经发送了一个'a'。
根据我的经验,当你发送一个类似的字符串:
string myString = "Hello World";
mySocket.send(myString.c_str(), myString.length());
如果我用(char*)或(unsigned char*)对myString.c_str()进行强制类型转换,结果是相同的。
一个字节总是8位:)
对
其他需要注意的是,是CPU的端字节,大于1字节的类型可能是一个问题。尝试将大端作为标准,因为这是大多数常见网络协议的标准。
问好。
相关文章:
- C++ TCP 套接字 | 无法将"std::__cxx11::字符串"转换为"const
- 通过 TCP 套接字发送大型 base64 字符串
- 无法通过 C++ 中的套接字发送字符串流变量
- 套接字缓冲区到字符串
- C++ 从末尾包含空字符的套接字读取字符串
- 将大字符串发送到套接字
- 使用套接字编程的c++中的字符串流与ifstream(ofstream)
- 写入套接字接收的进程字符串的输入
- 通过套接字C++发送长字符串
- 正在打开具有零填充IP字符串的升压套接字
- 变量中的字符串在通过套接字发送之前发生更改
- 如何使用字符串在Qt中使用套接字发送/接收XML数据
- C++ Linux 套接字,它在单个调用中将字符串数组 (char**) 作为串联字符串发送
- 由于PROTOBUF服务器中的字符串数据类型变量和客户端通过cpp中recv端的套接字进行通信,因此正在获取segfau
- char数组到字符串的转换会产生奇怪的字符-套接字
- 如何通过套接字读取从PHP发送到Qt服务器应用程序的字符串
- 内存泄漏-与套接字或字符串相关
- 这些通过套接字发送/接收字符串的函数有什么问题?
- c++通过套接字发送字符串
- 通过ZeroMQ以字符串形式接收对象,然后通过另一个套接字以零拷贝发送对象的正确方法是什么