Unity Socket網路程式設計(TCP)
阿新 • • 發佈:2019-02-17
開發工具:Visual Studio、Unity
開發語言:C#
【伺服器端】
在VS建立一個C#空專案
程式碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets; using System.Net; namespace NetworkServer { class Program { static void Main(string[] args) { /*建立一個socket物件*/ //定址方式 套接字型別 協議方式 Socket tcpSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); /*繫結監聽訊息IP和埠號*/ IPAddress ip = IPAddress.Parse("127.0.0.1"); EndPoint endPoint = new IPEndPoint(ip, 6000); tcpSocket.Bind(endPoint);//向作業系統申請一個ip和埠號 Console.WriteLine("伺服器端啟動完成"); /*開始監聽客戶端的連線請求*/ tcpSocket.Listen(100);//最多可以接收100個客戶端請求 Socket socket = tcpSocket.Accept();//暫停當前執行緒,知道接收到客戶端發來的連線請求;當接收到客戶端的連線請求後,在本地伺服器建立一個socket與客戶端連線,並返回出來 Console.WriteLine("有個客戶端連線進來"); /*向客戶端傳送訊息*/ string messge; messge="你好,我有什麼可以幫助到你嗎"; var date=ASCIIEncoding.UTF8.GetBytes(messge); socket.Send(date); /*從客戶端接收訊息*/ byte[] bt=new byte[1024];//設定一個訊息接收緩衝區 int message=socket.Receive(bt);//該狀態處於一個暫停狀態,知道接收到訊息,並返回位元組數 Console.WriteLine("接收到從客戶端發來的訊息:"+ASCIIEncoding.UTF8.GetString(bt)); Console.ReadLine(); } } }
【客戶端】
在unity下建立一個C#指令碼,將其掛載在main camera上,用一個按鈕觸發函式
程式碼如下:
using UnityEngine; using System.Collections; using System.Net.Sockets; using System.Net; using System.Text; public class NetworkClient : MonoBehaviour { private Socket tcpSocket; public void OnBtnConnect() { //建立socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //連線伺服器 tcpSocket.Connect(IPAddress.Parse("127.0.0.1"), 6000); Debug.Log("連線伺服器"); //接收訊息 byte[] bt = new byte[1024]; int messgeLength = tcpSocket.Receive(bt); Debug.Log(ASCIIEncoding.UTF8.GetString(bt)); //傳送訊息 tcpSocket.Send(ASCIIEncoding.UTF8.GetBytes("我有個問題")); } }
點選按鈕
效果圖如下,表明已經連線成功