通过网络将c#字符串发送到c ++服务器

时间:2014-04-24 10:14:46

标签: c# c++ networking

我正在编写一个需要与c ++服务器通信的c#客户端。我正在试图找到一种方法将字符串发送到服务器,我被卡住了,因为c#中的char是2个字节,而c ++中的char是1。

如何将我的字符串转换为将其作为服务器的可读字符串数组发送?

非常感谢!

Ps:我认为其他类型如int和我认为会遇到同样的问题。

3 个答案:

答案 0 :(得分:0)

在C ++中,您可以使用宽字符和两个字节的std::wstring

答案 1 :(得分:0)

在将字符串发送到服务器之前,您可以非常轻松地将字符串转换为ascii字节数组:

string message = ...
byte [] data = Encoding.ASCII.GetBytes(message);
server.Send(data);

请确保您发送的碎片由ascii-table中包含的字符组成。转换为ascii时,该表外的字符可能会带来一些惊喜。

将收到的答案从服务器转换回字符串

byte [] received = ...
string response = Encoding.ASCII.GetString(received);

答案 2 :(得分:0)

一般来说,将数据从客户端发送到服务器并通过某种连接返回并不是最简单的事情。 我可以分享我的经验,我需要将可序列化类的属性序列化为通过通用连接发送的字节流。

使用System.BitConverter,您可以将基本数据类型(bool,char,double,float,...)表示为字节数组:

byte[] f1 = BitConverter.GetBytes(MsgID); // MsgID is a ulong

对于string个对象,您可以使用UTF8编码:

// == Payload is a C# string ==
// calculates how many bytes we need to stream the Payload
payloadBufferSize = Encoding.UTF8.GetByteCount(Payload);
// create a suitable buffer
payloadBuffer = new byte[payloadBufferSize];
// Encode the Payload in the buffer
Encoding.UTF8.GetBytes(Payload, 0, Payload.Length, payloadBuffer, 0);

这样做你可以通过你的连接发送一个字节数组,因为另一方面你有一些能够解码UTF8字节流的对象。

如果您只想获得纯ASCII流,可以使用Encoding.ASCII编码器代替上面示例中的Encoding.UTF8,但如果您有unicode字符,那么您将获得''作为结果char。