1. 程式人生 > >Unity Socket網路程式設計(TCP)

Unity Socket網路程式設計(TCP)

開發工具: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("我有個問題"));
    }
}

點選按鈕

效果圖如下,表明已經連線成功