五、Unity如何使用Socket套接字

分为客户端与服务端,无论那端都需要使用Net库里的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