我正在做一个小型客户端/服务器项目作为C ++课程的最终项目。我们交给一些负责通信的类(使用sys / socket.h),我们基本上可以connection->send(byte)
发送一个字节的数据。
说我有一个我要发送的字符串。当从客户端发送到服务器或反之亦然时,如何确保'a'被解释为'a'?由于标准没有说任何关于char默认为无签名或签名的内容,我不知道如何处理它。
我知道我可以在每一端减去std::numeric_limits<char>::min()
,但我不确定它是不是很好。
答案 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 作为标准,因为它是大多数常见网络协议的标准。
最好的问候。