5. UnityでのSocketの使い方


クライアントとサーバーに分かれており、どちら側であっても、ネット ライブラリのソケット クライアントを使用する必要があります:
1. サービス アドレスとポート フィールドの作成
2. ソケットの作成
3. サーバーへの接続
4. データの送信
5. サーバーの受け入れ応答
6. ソケットを閉じる

using UnityEngine;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class ClientSocket : MonoBehaviour
{
    
    
    private Socket clientSocket;

    private void Start()
    {
    
    
        // 服务器地址和端口
        string serverAddress = "127.0.0.1";
        int serverPort = 5000;

        // 创建TCP/IP套接字
        clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 连接服务器
        clientSocket.Connect(serverAddress, serverPort);

        // 发送数据
        string message = "Hello, server!";
        byte[] data = Encoding.UTF8.GetBytes(message);
        clientSocket.Send(data);

        // 接收服务器的响应
        byte[] buffer = new byte[1024];
        int bytesRead = clientSocket.Receive(buffer);
        string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
        Debug.Log("Server response: " + response);

        // 关闭套接字连接
        clientSocket.Close();
    }
}

サーバー:
1. サービス アドレスとポートのフィールドを作成します
。 2. ソケットを作成します。 3.
サーバーのアドレスとポートをバインドします
。 4. リスニングを開始します。
5. 新しいスレッドでクライアント接続を処理します
。 6. データを送受信します
。 7. クライアントに応答を送信します。

using UnityEngine;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

public class ServerSocket : MonoBehaviour
{
    
    
    private Socket serverSocket;

    private void Start()
    {
    
    
        // 服务器地址和端口
        string serverAddress = "127.0.0.1";
        int serverPort = 5000;

        // 创建TCP/IP套接字
        serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        // 绑定服务器地址和端口
        serverSocket.Bind(new IPEndPoint(IPAddress.Parse(serverAddress), serverPort));

        // 开始监听连接
        serverSocket.Listen(1);

        Debug.Log("Waiting for a client to connect...");

        // 在新的线程中处理客户端连接
        Thread thread = new Thread(ListenForClients);
        thread.Start();
    }

    private void ListenForClients()
    {
    
    
        while (true)
        {
    
    
            // 等待客户端连接
            Socket clientSocket = serverSocket.Accept();
            Debug.Log("Client connected: " + clientSocket.RemoteEndPoint);

            // 在新的线程中处理客户端通信
            Thread clientThread = new Thread(HandleClientCommunication);
            clientThread.Start(clientSocket);
        }
    }

    private void HandleClientCommunication(object clientSocketObj)
    {
    
    
        Socket clientSocket = (Socket)clientSocketObj;

        try
        {
    
    
            // 接收客户端发送的数据
            byte[] buffer = new byte[1024];
            int bytesRead = clientSocket.Receive(buffer);
            string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Debug.Log("Received data: " + data);

            // 发送响应给客户端
            string response = "Hello, client!";
            byte[] responseData = Encoding.UTF8.GetBytes(response);
            clientSocket.Send(responseData);
        }
        catch (Exception e)
        {
    
    
            Debug.Log("Error handling client communication: " + e.Message);
        }
        finally
        {
    
    
            // 关闭客户端连接
            clientSocket.Close();
        }
    }
}

おすすめ

転載: blog.csdn.net/weixin_44047050/article/details/131329267