分享

unity socket学习(二)

 3dC 2013-10-23
 

unity socket学习(二)

 425人阅读 评论(0) 收藏 举报

转载于:圣典的unity csharp socket 异步通信 客户端http://game./forum/read.php?tid=1478

 

  1. unity csharp socket 异步通信 客户端  
  2. 作者:围城(solq)  
  3. bolg:http://www.cnblogs.com/solq/  
  4. 服务端用java nio 测试过是可以的。。。。 ...  
  5.  demo : http://unitysgui.sinaapp.com/chat  
  6. using UnityEngine;  
  7. using System.Collections;  
  8. using System.Net.Sockets;  
  9. using System.Net;  
  10. using System;  
  11. using System.Text;  
  12. using System.Threading;  
  13.    
  14. public class TestAsyncSocketClient2 : MonoBehaviour  
  15. {  
  16.     private Socket client = null;  
  17.     private string ip = "127.0.0.1";  
  18.     private int port = 8989;  
  19.    
  20.     private int size = 1024;  
  21.     private byte[] readData = new byte[1024];  
  22.     private byte[] data = new byte[1024];  
  23.     void Start()                        
  24.     {  
  25.         //  socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 多socket 复用同一端口  
  26.         client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
  27.         IPEndPoint address = new IPEndPoint(IPAddress.Parse(ip), port);  
  28.         //client.Blocking = false;  
  29.         client.BeginConnect(address, new AsyncCallback(Connected), null); //建立异步连接服务 , Connected 进行监听  
  30.         //connectDone.WaitOne();  
  31.     }  
  32.     void Connected(IAsyncResult iar)    //建立连接  
  33.     {  
  34.        //Socket client = (Socket)iar.AsyncState;  
  35.        client.EndConnect(iar);  
  36.         //client.BeginReceive(data, 0, size, SocketFlags.None, new AsyncCallback(ReceiveData), client);  
  37.         echo("建立连接");  
  38.    
  39.     }  
  40.     void Send(string str)  
  41.     {  
  42.         byte[] msg = Encoding.UTF8.GetBytes(str);  
  43.         client.BeginSend(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(SendData), client);    //开始发送  
  44.     }  
  45.     void SendData(IAsyncResult iar) //发送数据  
  46.     {  
  47.         Socket remote = (Socket)iar.AsyncState;  
  48.         int sent = remote.EndSend(iar);         //关闭发送  
  49.         remote.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ReceiveData), remote);   //开始接收  
  50.     }  
  51.    
  52.    
  53.    
  54.     void Update()  
  55.     {  
  56.         startReceive(); //这步很重要,,,不然会收不到服务器发过来的消息  
  57.     }  
  58.     bool ReceiveFlag = true;  
  59.     void startReceive()  
  60.     {  
  61.         if (ReceiveFlag) {  
  62.             ReceiveFlag = false;  
  63.             client.BeginReceive(readData, 0, readData.Length, SocketFlags.None, new AsyncCallback(endReceive), client);  
  64.         }             
  65.     }  
  66.    
  67.     void endReceive(IAsyncResult iar) //接收数据  
  68.     {  
  69.         ReceiveFlag = true;  
  70.         Socket remote = (Socket)iar.AsyncState;  
  71.         int recv = remote.EndReceive(iar);  
  72.         if (recv > 0)  
  73.         {  
  74.             string stringData = Encoding.UTF8.GetString(readData, 0, recv);  
  75.             text2 += "\n" + "接收服务器数据:+++++++++++++++" + stringData;  
  76.         }  
  77.    
  78.     }  
  79.     void ReceiveData(IAsyncResult iar) //接收数据  
  80.     {  
  81.         Socket remote = (Socket)iar.AsyncState;  
  82.         int recv = remote.EndReceive(iar);          //关闭接收 注意:如果关闭了接收,就不能接收了 测试是这样  
  83.    
  84.         string stringData = Encoding.UTF8.GetString(data, 0, recv);  
  85.         text2 += "\n" + "回收发送数据:+++++++++++++++" + stringData;  
  86.    
  87.     }  
  88.    
  89.    
  90.     void CloseSocket()                  //关闭socket  
  91.     {  
  92.         if (client.Connected)  
  93.         {  
  94.             echo("关闭socket");  
  95.             client.Close();  
  96.         }              
  97.     }  
  98.     void OnApplicationQuit()  
  99.     {  
  100.         CloseSocket();  
  101.     }  
  102.    
  103.     void echo(object msg)  
  104.     {  
  105.         Debug.Log(msg);  
  106.     }  
  107.    
  108.     string text = "";  
  109.     string text2 = "";  
  110.     Vector2 p = new Vector2(600, 300);  
  111.     void OnGUI()  
  112.     {  
  113.         GUILayout.BeginVertical(GUILayout.Width(500) );  
  114.             text = GUILayout.TextField(text);  
  115.             if (GUILayout.Button("发送数据"))  
  116.             {  
  117.                 Send(text);  
  118.             }  
  119.             GUILayout.BeginScrollView(p);  
  120.             text2 = GUILayout.TextArea(text2, GUILayout.Height(300));  
  121.             GUILayout.EndScrollView();  
  122.         GUILayout.EndVertical();  
  123.    
  124.     }  
  125.    
  126. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约