亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中Socket與Unity相結合示例代碼

2019-10-29 21:08:33
字體:
來源:轉載
供稿:網友

前言

初步接觸了Socket,現使其與Unity相結合,做成一個簡單的客戶端之間可以互相發送消息的一個Test。下面話不多說了,來一起看看詳細的介紹吧。

方法如下:

首先,是服務端的代碼。

創建一個連接池,用于存儲客戶端的數量。

using System;using System.Net;using System.Net.Sockets;using System.Collections;using System.Collections.Generic;namespace Server{ /// <summary> /// 對象池 /// </summary> public class Conn {  //常量,用于表示傳輸的字節最大數量,最大接收的字節數  public const int buffer_Size = 1024;  //Socket  public Socket socket;  //是否連接  public bool isUse = false;  //傳輸數組,用來存儲接受到的數據  public byte[] readBuff = new byte[buffer_Size];  public int buffCount = 0;  /// <summary>  /// 構造函數  /// </summary>  public Conn()  {   readBuff = new byte[buffer_Size];  }  /// <summary>  /// 初始化  /// </summary>  /// <param name="socket"></param>  public void Init(Socket socket)  {   this.socket = socket;   isUse = true;   buffCount = 0;  }  /// <summary>  /// 緩沖區剩下的字節數  /// </summary>  /// <returns></returns>  public int BuffRemain()  {   return buffer_Size - buffCount;  }  /// <summary>  /// 獲得客戶端地址  /// </summary>  /// <returns></returns>  public string GetAdress()  {   if (!isUse)   {    return "無法獲得地址";   }   else   {    return socket.RemoteEndPoint.ToString();   }  }  /// <summary>  /// 關閉連接  /// </summary>  public void Close()  {   if (!isUse)   {    return;   }   else   {    Console.WriteLine("斷開連接" + GetAdress());    socket.Close();    isUse = false;   }  } }}

對象池創建完成后,需要在創建一個連接類,用來維護客戶端的連接。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets; namespace Server{ class Serv {  //監聽套接字  public Socket listenfd;  //客戶端鏈接  public Conn[] conns;  //最大的連接數量  public int maxConn = 50;  //獲取鏈接池索引,返回負數表示獲取失敗  public int NewIndex()  {   if(conns==null)   {    return -1;   }   for (int i = 0; i < conns.Length;i++ )   {    if(conns[i]==null)    {     conns[i] = new Conn();     return i;    }else if(conns[i].isUse==false)    {     return i;    }   }   return -1;  }  //開啟一個服務器  public void Start(string host,int port)  {   conns = new Conn[maxConn];   for (int i = 0; i < maxConn;i++ )   {    conns[i] = new Conn();   }   listenfd = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   IPAddress ipAdr = IPAddress.Parse(host);   IPEndPoint ipEp = new IPEndPoint(ipAdr, port);   //與一個本地終結點相關聯   listenfd.Bind(ipEp);   //監聽   listenfd.Listen(maxConn);   listenfd.BeginAccept(AcceptCb, listenfd);  }  //AcceptCb回調  public void AcceptCb(IAsyncResult ar)  {   try   {    Socket sSocket = ar.AsyncState as Socket;    Socket socket = sSocket.EndAccept(ar);    int index = NewIndex();    if(index<0)    {     socket.Close();     Console.WriteLine("連接已滿");    }    else    {     Conn conn = conns[index];     conn.Init(socket);     string adr = conn.GetAdress();     Console.WriteLine("客戶端連接[" + adr + "Conn池ID: " + index);     conn.socket.BeginReceive(conn.readBuff, conn.buffCount, conn.BuffRemain(), SocketFlags.None, ReceiveCb, conn);    }    listenfd.BeginAccept(AcceptCb, listenfd);   }catch(SocketException ex)   {    Console.WriteLine(ex);   }  }  //ReceiveCb回調  public void ReceiveCb(IAsyncResult ar)  {   Conn conn = (Conn)ar.AsyncState;   try   {    int count = conn.socket.EndReceive(ar);    if(count<=0)    {     Console.WriteLine("收到:" + conn.GetAdress() + "斷開連接");     conn.Close();     return;    }    string str = Encoding.UTF8.GetString(conn.readBuff,0,count);    Console.WriteLine("接收到[" + conn.GetAdress() + "]數據" + str);    byte[] bytes = Encoding.UTF8.GetBytes(str);    for (int i = 0; i < conns.Length;i++ )    {     if(conns[i]==null)      continue;     if (!conns[i].isUse)      continue;     Console.WriteLine("將消息傳送給" + conns[i].GetAdress());     conns[i].socket.Send(bytes);    }    conn.socket.BeginReceive(conn.readBuff, conn.buffCount, conn.BuffRemain(), SocketFlags.None,ReceiveCb, conn);   }   catch(SocketException ex)   {    Console.WriteLine(ex);    Console.WriteLine("收到:" + conn.GetAdress() + "斷開連接");    conn.Close();   }  } }}

最后是創建一個Unity的工程,搭建一個簡單的頁面,通過下面的代碼你可以了解需要哪些組件

using UnityEngine;using System.Collections;using System.Net;using System.Net.Sockets;using UnityEngine.UI;using System.Collections.Generic;using System;public class net : MonoBehaviour{ //ip和端口 public InputField hostInput; public InputField portInput; //顯示客戶端接受的消息 public Text recvText; public string recvStr; //顯示客戶端IP和端口 public Text clientText; //聊天輸入框 public InputField TextInput; Socket socket; const int buffer_Size = 1024; public byte[] readBuff = new byte[buffer_Size]; void FixedUpdate() {  recvText.text = recvStr; } //連接服務器(需要一個Button觸發) public void Connetion() {  recvText.text = "";  socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  string host = hostInput.text;  int port = int.Parse(portInput.text);  socket.Connect(host, port);  clientText.text = "客戶端地址:"+socket.LocalEndPoint.ToString();  socket.BeginReceive(readBuff, 0, buffer_Size, SocketFlags.None, ReceiveCb,socket); } /// <summary> /// 接受數據 /// </summary> /// <param name="ar"></param> public void ReceiveCb(IAsyncResult ar) {    try  {   int count = socket.EndReceive(ar);   string str = System.Text.Encoding.UTF8.GetString(readBuff, 0, count);   if (recvStr.Length > 300) recvStr = "";   recvStr += socket.LocalEndPoint.ToString()+str + "/n";   Debug.Log("12346");   socket.BeginReceive(readBuff, 0, buffer_Size, SocketFlags.None, ReceiveCb, socket);  }catch(SocketException ex)  {   Debug.Log(ex);  } } /// <summary> /// 發送數據,(需要一個Button觸發) /// </summary> public void Send() {  string str = TextInput.text;  byte[] tex = System.Text.Encoding.UTF8.GetBytes(str);  try  {   socket.Send(tex);    }  catch(SocketException ex)  {   Debug.Log(ex);  } }}

以上內容出自羅培羽老師《unity3d網絡游戲實戰》一書。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩高清在线观看| 国产精品日韩欧美| 精品国产一区久久久| 国产精品xxx视频| 精品调教chinesegay| 欧美综合一区第一页| 伊人男人综合视频网| 精品动漫一区二区三区| 欧美色另类天堂2015| 日韩中文字幕在线免费观看| 国产成人aa精品一区在线播放| 国产精品国语对白| 51精品国产黑色丝袜高跟鞋| 久久久国产视频91| 欧美激情免费观看| 久久精视频免费在线久久完整在线看| 久久精品亚洲国产| 一本久久综合亚洲鲁鲁| 美女福利精品视频| 亚洲毛片在线观看.| 91福利视频网| 亚洲电影免费观看高清完整版| 亚洲欧美激情四射在线日| 中文字幕精品一区二区精品| 色视频www在线播放国产成人| 亚洲电影免费在线观看| 亚洲少妇中文在线| 欧美日韩电影在线观看| 欧美成人精品在线视频| 国产精品美腿一区在线看| 国产精品欧美在线| 久久久久久12| 欧美日韩免费观看中文| 91超碰caoporn97人人| 国产精品丝袜久久久久久高清| 欧美xxxwww| 日韩精品在线第一页| 欧美成人午夜影院| 精品久久国产精品| 欧美刺激性大交免费视频| 成人乱色短篇合集| 日韩精品视频在线| 色中色综合影院手机版在线观看| 国产精品草莓在线免费观看| 成人女保姆的销魂服务| 精品久久久国产精品999| 国产成人精品综合| 欧美性猛交丰臀xxxxx网站| 欧美黑人一区二区三区| www欧美日韩| 国产色婷婷国产综合在线理论片a| 亚洲三级av在线| 国产精品一区电影| 97欧美精品一区二区三区| 欧美午夜宅男影院在线观看| 亚洲一区二区三区成人在线视频精品| 中文字幕国产精品| 亚洲国产高潮在线观看| 国产乱肥老妇国产一区二| 狠狠躁夜夜躁人人爽天天天天97| 亚洲一区999| 91性高湖久久久久久久久_久久99| 国产偷国产偷亚洲清高网站| 91精品国产91| 中文字幕九色91在线| 久久亚洲精品中文字幕冲田杏梨| 国产日韩在线观看av| 深夜福利日韩在线看| 91社区国产高清| 97精品欧美一区二区三区| 日韩精品视频在线免费观看| 55夜色66夜色国产精品视频| 亚洲精品一二区| 久久久国产精品x99av| 91国产精品电影| 欧美韩国理论所午夜片917电影| 精品国产一区二区三区久久狼5月| 亚洲free性xxxx护士hd| 97视频在线观看免费高清完整版在线观看| 亚洲视频在线观看| 成人激情黄色网| 亚洲欧美国产精品专区久久| 久久久噜噜噜久久| 国产女人18毛片水18精品| 亚洲欧洲第一视频| 欧美日韩爱爱视频| 欧美一区二区三区免费视| 亚洲二区中文字幕| 在线观看视频99| 97av在线影院| 日韩精品久久久久久福利| 日韩免费观看在线观看| 欧美另类极品videosbest最新版本| 久久久国产影院| 国产成人精品日本亚洲| 日韩一区av在线| 日韩在线精品一区| 国产欧美一区二区三区在线看| 在线视频亚洲欧美| 欧美极品在线播放| 国产做受69高潮| 精品亚洲一区二区三区在线观看| 亚洲国产成人精品一区二区| 日韩欧美亚洲国产一区| 国产精品视频久久久久| 色青青草原桃花久久综合| 在线国产精品播放| 国产精品海角社区在线观看| 亚洲国产成人精品久久久国产成人一区| 国产精品久久久久久亚洲影视| 黄色成人av网| 国产精品视频男人的天堂| 51午夜精品视频| 性色av一区二区三区红粉影视| 欧美成人亚洲成人日韩成人| 国产主播欧美精品| 欧美日韩中文字幕在线视频| 欧美精品18videosex性欧美| 亚洲国产小视频| 综合国产在线视频| 欧美精品日韩三级| 色久欧美在线视频观看| 欧美性受xxxx白人性爽| 精品亚洲一区二区三区四区五区| 久久精品久久久久久国产 免费| 国产91露脸中文字幕在线| 日本成人黄色片| 黑人极品videos精品欧美裸| 92国产精品久久久久首页| 成人黄色av免费在线观看| 亚洲国产精品久久久久秋霞蜜臀| 中文字幕日韩av电影| 69视频在线播放| 国产欧美日韩综合精品| 最新国产成人av网站网址麻豆| 久久亚洲影音av资源网| 国产成人免费91av在线| 欧美性少妇18aaaa视频| 成人亚洲综合色就1024| 日韩中文字幕网| 国产va免费精品高清在线| 国产精品久久久久一区二区| 日韩在线播放视频| 91精品国产综合久久香蕉的用户体验| 精品欧美国产一区二区三区| 4388成人网| 91精品国产成人| 国产一区二区三区视频| 国内精品久久久久久久| 国产欧美婷婷中文| 国产区亚洲区欧美区| 在线性视频日韩欧美| 国产日韩在线亚洲字幕中文| 久久久在线观看| 国产精品人成电影| 精品视频在线播放色网色视频| 国产欧美精品一区二区三区-老狼| 亚洲影院污污.| 国产精品中文字幕久久久| 国产精品入口日韩视频大尺度| 国产成人一区二区在线| 国精产品一区一区三区有限在线| 久久久精品一区二区| 欧美中文在线观看国产|