c++通过套接字发送字符串

C++ sending string over socket

本文关键字:字符串 套接字 c++      更新时间:2023-10-16

我正在做一个小型的客户端/服务器项目,作为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字节的类型可能是一个问题。尝试将大端作为标准,因为这是大多数常见网络协议的标准。

问好。