Unity Socket網路程式設計(TCP) 簡單例子-1
開發工具: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("我有個問題"));
-
}
-
}
點選按鈕
效果圖如下,表明已經連線成功