C ++在socket上发送字符串

时间:2013-03-22 10:35:20

标签: c++ sockets character-encoding

我正在做一个小型客户端/服务器项目作为C ++课程的最终项目。我们交给一些负责通信的类(使用sys / socket.h),我们基本上可以connection->send(byte)发送一个字节的数据。

说我有一个我要发送的字符串。当从客户端发送到服务器或反之亦然时,如何确保'a'被解释为'a'?由于标准没有说任何关于char默认为无签名或签名的内容,我不知道如何处理它。

我知道我可以在每一端减去std::numeric_limits<char>::min(),但我不确定它是不是很好。

3 个答案:

答案 0 :(得分:4)

TCP和UDP都不关心字符串的编码。它将始终被解释为一个字节数组。因此,为了确保正确解释您的字符串,服务器和客户端必须就通用编码达成一致。

在你的情况下,我将简单地使用std :: string的c_str()方法来发送字符串,并通过将接收的数据解释为const char*来分配字符串(对于ASCII字符串)。只要客户端应用程序和服务器应用程序使用相同的字符串库,这应该可以正常工作。

答案 1 :(得分:1)

要验证您的通讯,您应该使用网络嗅探器。 Wireshark是一个很好的。

如果嗅探器捕获您的以太网数据包并说它有一个'a',您可以非常确定您已发送'a'。

根据我的经验,当你发送一个类似于那个字符串的字符串时:

string myString = "Hello World";

mySocket.send(myString.c_str(), myString.length());

如果我使用(char *)或(unsigned char *)进行myString.c_str()的转换,结果是一样的。

一个字节总是8位:)

此致

答案 2 :(得分:0)

其他人想要知道,是你的CPU的endiannes,类型大于1字节可能是一个问题。尝试将 big endian 作为标准,因为它是大多数常见网络协议的标准。

最好的问候。