繁体   English   中英

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

[英]C++ sending string over socket

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

说我有一个要发送的字符串。 当从客户端发送到服务器时,如何确保将“ a”解释为“ a”,反之亦然? 由于标准没有说关于默认设置为unsigned或signed的char,所以我不知道如何处理它。

我有一个想法,我可以在每一端减去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个字节的类型可能是一个问题。 尝试将big endian作为标准,因为这是大多数常见网络协议的标准。

最好的祝福。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM