Unity3d基于Socket通讯例子

点击查看原图
本人是新手,但是找了很久都找不到类似的通讯源码,后来终于在一个网站上看到有关于Socket的通讯事例,所以就抄过来希望能够帮助更多像我一样的初学者!嘻嘻

首先创建一个C# 控制台应用程序, 直接服务器端代码丢进去,然后再到Unity 里面建立一个工程,把客户端代码挂到相机上,运行服务端,再运行客户端。 高手勿喷!~!

完全源码已经奉上,大家开始研究吧!! 嘎嘎嘎!
服务端代码:Program.cs


普通浏览 复制代码
  1. using  System ;
  2. using  System. Collections. Generic ;
  3. using  System.Linq ;
  4. using  System. Text ;
  5. using  System. Net. Sockets ;
  6. namespace SoketDemo
  7. {
  8.      class Program
  9.     {
  10.          // 设置连接端口
  11.          const  int portNo =  500 ;
  12.          static  void Main ( string [ ] args )
  13.         {
  14.              // 初始化服务器IP
  15.              System. Net.IPAddress localAdd =  System. Net.IPAddress.Parse ( "127.0.0.1" ) ;
  16.              // 创建TCP侦听器
  17.             TcpListener listener =  new TcpListener (localAdd, portNo ) ;
  18.             listener.Start ( ) ;
  19.              // 显示服务器启动信息
  20.             Console.WriteLine ( "Server is starting...\n" ) ;
  21.              // 循环接受客户端的连接请求
  22.              while  ( true )
  23.             {
  24.                 ChatClient user =  new ChatClient (listener.AcceptTcpClient ( ) ) ;
  25.                  // 显示连接客户端的IP与端口
  26.                 Console.WriteLine (user._clientIP +  " is joined...\n" ) ;
  27.             }
  28.         }
  29.     }
  30. }


服务端代码:ChatClient.cs
普通浏览 复制代码
  1. using  System ;
  2. using  System. Collections. Generic ;
  3. using  System.Linq ;
  4. using  System. Text ;
  5. using  System. Net. Sockets ;
  6. namespace SoketDemo
  7. {
  8.      class Program
  9.     {
  10.          // 设置连接端口
  11.          const  int portNo =  500 ;
  12.          static  void Main ( string [ ] args )
  13.         {
  14.              // 初始化服务器IP
  15.              System. Net.IPAddress localAdd =  System. Net.IPAddress.Parse ( "127.0.0.1" ) ;
  16.              // 创建TCP侦听器
  17.             TcpListener listener =  new TcpListener (localAdd, portNo ) ;
  18.             listener.Start ( ) ;
  19.              // 显示服务器启动信息
  20.             Console.WriteLine ( "Server is starting...\n" ) ;
  21.              // 循环接受客户端的连接请求
  22.              while  ( true )
  23.             {
  24.                 ChatClient user =  new ChatClient (listener.AcceptTcpClient ( ) ) ;
  25.                  // 显示连接客户端的IP与端口
  26.                 Console.WriteLine (user._clientIP +  " is joined...\n" ) ;
  27.             }
  28.         }
  29.     }
  30. }


服务端代码:ChatClient.cs


普通浏览 复制代码
  1. using  System ;
  2. using  System. Collections. Generic ;
  3. using  System.Linq ;
  4. using  System. Text ;
  5. using  System. Collections ;
  6. using  System. Net. Sockets ;
  7. namespace SoketDemo
  8. {
  9.      class ChatClient
  10.     {
  11.          public  static Hashtable ALLClients =  new Hashtable ( ) ;  // 客户列表
  12.          private TcpClient _client ;   // 客户端实体
  13.          public  string _clientIP ;    // 客户端IP
  14.          private  string _clientNick ;  // 客户端昵称
  15.          private  byte [ ] data ;         // 消息数据
  16.          private  bool ReceiveNick =  true ;
  17.          public ChatClient (TcpClient client )
  18.         {
  19.              this._client = client ;
  20.              this._clientIP = client.Client.RemoteEndPoint.ToString ( ) ;
  21.              // 把当前客户端实例添加到客户列表当中
  22.             ALLClients.Add ( this._clientIP,  this ) ;
  23.             data =  new  byte [ this._client.ReceiveBufferSize ] ;
  24.              // 从服务端获取消息
  25.             client.GetStream ( ).BeginRead (data,  0System.Convert.ToInt32 ( this._client.ReceiveBufferSize ), ReceiveMessage,  null ) ;
  26.         }
  27.          // 从客戶端获取消息
  28.          public  void ReceiveMessage (IAsyncResult ar )
  29.         {
  30.              int bytesRead ;
  31.              try
  32.             {
  33.                  lock  ( this._client.GetStream ( ) )
  34.                 {
  35.                     bytesRead =  this._client.GetStream ( ).EndRead (ar ) ;
  36.                 }
  37.                  if  (bytesRead <  1 )
  38.                 {
  39.                     ALLClients.Remove ( this._clientIP ) ;
  40.                     Broadcast ( this._clientNick +  " has left the chat" ) ;
  41.                      return ;
  42.                 }
  43.                  else
  44.                 {
  45.                      string messageReceived =  System. Text.Encoding.ASCII.GetString (data,  0, bytesRead ) ;
  46.                      if  (ReceiveNick )
  47.                     {
  48.                          this._clientNick = messageReceived ;
  49.                         Broadcast ( this._clientNick +  " has joined the chat." ) ;
  50.                          //this.sendMessage("hello");
  51.                         ReceiveNick =  false ;
  52.                     }
  53.                      else
  54.                     {
  55.                         Broadcast ( this._clientNick +  ">" + messageReceived ) ;
  56.                     }
  57.                 }
  58.                  lock  ( this._client.GetStream ( ) )
  59.                 {
  60.                      this._client.GetStream ( ).BeginRead (data,  0System.Convert.ToInt32 ( this._client.ReceiveBufferSize ), ReceiveMessage,  null ) ;
  61.                 }
  62.             }
  63.              catch  (Exception ex )
  64.             {
  65.                 ALLClients.Remove ( this._clientIP ) ;
  66.                 Broadcast ( this._clientNick +  " has left the chat." ) ;
  67.             }
  68.         }
  69.          // 向客戶端发送消息
  70.          public  void sendMessage ( string message )
  71.         {
  72.              try
  73.             {
  74.                  System. Net. Sockets.NetworkStream ns ;
  75.                  lock  ( this._client.GetStream ( ) )
  76.                 {
  77.                     ns =  this._client.GetStream ( ) ;
  78.                 }
  79.                  // 对信息进行编码
  80.                  byte [ ] bytesToSend =  System. Text.Encoding.ASCII.GetBytes (message ) ;
  81.                 ns.Write (bytesToSend,  0, bytesToSend.Length ) ;
  82.                 ns.Flush ( ) ;
  83.             }
  84.              catch  (Exception ex )
  85.             {
  86.             }
  87.         }
  88.          // 向客户端广播消息
  89.          public  void Broadcast ( string message )
  90.         {
  91.             Console.WriteLine (message ) ;
  92.              foreach  (DictionaryEntry c  in ALLClients )
  93.             {
  94.                  ( (ChatClient ) (c.Value ) ).sendMessage (message + Environment.NewLine ) ;
  95.             }
  96.         }
  97.     }
  98. }



客户端代码 :ClientHandler 

普通浏览 复制代码
  1. using UnityEngine ;
  2. using  System. Collections ;
  3. using  System ;
  4. using  System. Collections. Generic ;
  5. using  System. ComponentModel ;
  6. using  System. Text ;
  7. using  System. Net. Sockets ;
  8. public  class ClientHandler : MonoBehaviour
  9. {
  10.      const  int portNo =  500 ;
  11.      private TcpClient _client ;
  12.      byte [ ] data ;
  13.      public  string nickName =  "" ;
  14.      public  string message =  "" ;
  15.      public  string sendMsg =  "" ;
  16.      void OnGUI ( )
  17.     {
  18.         nickName = GUI.TextField ( new Rect ( 101010020 ), nickName ) ;
  19.         message = GUI.TextArea ( new Rect ( 1040300200 ), message ) ;
  20.         sendMsg = GUI.TextField ( new Rect ( 1025021020 ), sendMsg ) ;
  21.          if  (GUI.Button ( new Rect ( 120108020 )"Connect" ) )
  22.         {
  23.              //Debug.Log("hello");
  24.              this._client =  new TcpClient ( ) ;
  25.              this._client.Connect ( "127.0.0.1", portNo ) ;
  26.             data =  new  byte [ this._client.ReceiveBufferSize ] ;
  27.              //SendMessage(txtNick.Text);
  28.             SendMessage (nickName ) ;
  29.              this._client.GetStream ( ).BeginRead (data,  0System.Convert.ToInt32 ( this._client.ReceiveBufferSize ), ReceiveMessage,  null ) ;
  30.         } ;
  31.          if  (GUI.Button ( new Rect ( 2302508020 )"Send" ) )
  32.         {
  33.             SendMessage (sendMsg ) ;
  34.             sendMsg =  "" ;
  35.         } ;
  36.     }
  37.      public  void SendMessage ( string message )
  38.     {
  39.          try
  40.         {
  41.             NetworkStream ns =  this._client.GetStream ( ) ;
  42.              byte [ ] data =  System. Text.Encoding.ASCII.GetBytes (message ) ;
  43.             ns.Write (data,  0, data.Length ) ;
  44.             ns.Flush ( ) ;
  45.         }
  46.          catch  (Exception ex )
  47.         {
  48.              //MessageBox.Show(ex.ToString());
  49.         }
  50.     }
  51.      public  void ReceiveMessage (IAsyncResult ar )
  52.     {
  53.          try
  54.         {
  55.              int bytesRead ;
  56.             bytesRead =  this._client.GetStream ( ).EndRead (ar ) ;
  57.              if  (bytesRead <  1 )
  58.             {
  59.                  return ;
  60.             }
  61.              else
  62.             {
  63.                 Debug.Log ( System. Text.Encoding.ASCII.GetString (data,  0, bytesRead ) ) ;
  64.                 message +=  System. Text.Encoding.ASCII.GetString (data,  0, bytesRead ) ;
  65.             }
  66.              this._client.GetStream ( ).BeginRead (data,  0System.Convert.ToInt32 ( this._client.ReceiveBufferSize ), ReceiveMessage,  null ) ;
  67.         }
  68.          catch  (Exception ex )
  69.         {
  70.         }
  71.     }
  72. }



转载自 http://www.u3dchina.com/t-4741-1-1.html

普通浏览 复制代码
  1. using  System ;
  2. using  System. Collections. Generic ;
  3. using  System.Linq ;
  4. using  System. Text ;
  5. using  System. Net. Sockets ;
  6. namespace SoketDemo
  7. {
  8.      class Program
  9.     {
  10.          // 设置连接端口
  11.          const  int portNo =  500 ;
  12.          static  void Main ( string [ ] args )
  13.         {
  14.              // 初始化服务器IP
  15.              System. Net.IPAddress localAdd =  System. Net.IPAddress.Parse ( "127.0.0.1" ) ;
  16.              // 创建TCP侦听器
  17.             TcpListener listener =  new TcpListener (localAdd, portNo ) ;
  18.             listener.Start ( ) ;
  19.              // 显示服务器启动信息
  20.             Console.WriteLine ( "Server is starting...\n" ) ;
  21.              // 循环接受客户端的连接请求
  22.              while  ( true )
  23.             {
  24.                 ChatClient user =  new ChatClient (listener.AcceptTcpClient ( ) ) ;
  25.                  // 显示连接客户端的IP与端口
  26.                 Console.WriteLine (user._clientIP +  " is joined...\n" ) ;
  27.             }
  28.         }
  29.     }
  30. }


服务端代码:ChatClient.cs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值