Unity3D中的Socket通信

设计为四个部分,第一部分接收发送数据,第二部分本地数据转换为字节发送到服务器包括发送包长度,包头,加密,具体内容等.第三部分接收byte转换为数据.第四部分监听.


第一部分简单示例:连接服务器Ip 端口,发送请求,接收数据同理.


  1. public static void SocketConnect(string serverIP, int serverPort)
  2.     {
  3.         clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  4.         IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);
  5.         try
  6.         {
  7.             clientSocket.Connect(ipe);
  8.             Debug.Log(" Connect Success IP: " + serverIP + " Port : " + serverPort.ToString());
  9.         }
  10.         catch (Exception e)
  11.         {
  12.             Debug.LogError(e.ToString());
  13.         }
  14.     }
  15.     //发送数据
  16.     public static void Send(byte[] bytes)
  17.     {
  18.         if (clientSocket == null)
  19.             return;
  20.         if (!clientSocket.Connected)
  21.             return;
  22.         if (clientSocket.Poll(0, SelectMode.SelectWrite))
  23.         {
  24.             try
  25.             {
  26.                 clientSocket.Send(bytes);
  27.             }
  28.             catch (Exception e)
  29.             {
  30.                 Debug.LogError(e.ToString());
  31.             }
  32.         }
  33.     }
复制代码
第二部分请求数据示例:
  1. public void _MSG_ACCOUNT(string name, string pwd)
  2.     {
  3.         ACCOUNT account = new ACCOUNT();
  4.         datas = new byte[account.length];
  5.         byte[] bytesLength = BitConverter.GetBytes((System.Int16)account.length);
  6.         int length = 0;
  7.         bytesLength.CopyTo(datas, length);
  8.         length += 2;
  9.         byte[] bytesID = BitConverter.GetBytes((System.Int16)account.ID);
  10.         bytesID.CopyTo(datas, length);
  11.         length += 2;
  12.         byte[] bytesName = Encoding.Default.GetBytes(name);
  13.         bytesName.CopyTo(datas, length);
复制代码
第三部分接收数据示例:
  1. void _MSG_CONNECT(byte[] datas)
  2.     {

  3.         connect = new CONNECT();
  4.         int length = 4;
  5.         connect.idAccount = BitConverter.ToUInt32(datas, length);
  6.         Debug.LogError("账号ID          " + connect.idAccount);

  7.         length += System.Runtime.InteropServices.Marshal.SizeOf(connect.idAccount);
  8.         connect.dwData = BitConverter.ToUInt32(datas, length);
  9.         Debug.LogError("认证ID            " + connect.dwData);

  10.         length += System.Runtime.InteropServices.Marshal.SizeOf(connect.dwData);
  11.         connect.nServerIndex = BitConverter.ToUInt32(datas, length);
  12.         Debug.LogError("游戏逻辑服务器索引           " + connect.nServerIndex);
复制代码
运行效果:


1.png
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值