通过套接字发送和接收多个可变数据的最佳方式

时间:2014-12-13 08:55:19

标签: c# sockets

我正在开发一个使用套接字发送和接收数据的游戏项目。客户端游戏是Unity,服务器是ASP.Net。

众所周知,在套接字上你可以发送和接收字节。那么,对于我来说,发送和接收多个变量(如速度方向等)的最佳方式是什么。

我认为最好的方法是将所有变量连接到字符串并将该字符串转换为字节,然后在另一端发送和取消连接字符串。但也许它不是最好的方式,可能还有其他方式,特别是在C#中。这是我认为可以正常工作的伪代码:

 int position,rotation;
 string data=concat(data,position,rotation);
 byte[] byteBuffer = Encoding.ASCII.GetBytes(data);
 socket.send(bytebuffer);

我认为这种方式不够有效。我可以找到其他方式吗?

2 个答案:

答案 0 :(得分:2)

除非你真的需要一个字符串,否则没有理由搞乱字符串。

您可以改用BinaryReaderBinaryWriter。这样,您可以将有效负载大小保持在最低限度,并且不必处理字符串编码(除非写入和读取实际的字符串)。

// Client
using(var ms = new MemoryStream())
{
   using (var writer = new BinaryWriter(ms))
   {
       //writes 8 bytes
       writer.Write(myDouble);

       //writes 4 bytes
       writer.Write(myInteger);

       //writes 4 bytes
       writer.Write(myOtherInteger);
   }    
   //The memory stream will now have all the bytes (16) you need to send to the server
}

// Server
using (var reader = new BinaryReader(yourStreamThatHasTheBytes))
{
    //Make sure you read in the same order it was written....

    //reads 8 bytes
    var myDouble = reader.ReadDouble();

    //reads 4 bytes
    var myInteger = reader.ReadInt32();

    //reads 4 bytes
    var myOtherInteger = reader.ReadInt32();
}

  

我认为这种方式不够有效。我可以找到其他方式吗? [原文如此]

你不应该担心。听起来你还处于项目的第一阶段。我建议先让一些工作,但要确保你可以插件。这样,如果您认为您的解决方案太慢或者决定使用其他东西而不是套接字,您可以在以后轻松交换它。

答案 1 :(得分:1)

谢谢我的朋友,但我找到了更简单的方法,并选择与你分享。你可以将一些varibales设置为一个字符串,之后你可以将它分开来单独阅读它们。代码如下:

string s = "first,second,x";
 string[] s2=s.Split(',');
 Console.WriteLine(s2[0]);
 Console.ReadLine();
谢谢。