5. How to use Socket in Unity

It is divided into client and server. No matter which side needs to use the Socket
client in the Net library:
1. Create service address and port fields
2. Create socket
3. Connect to server
4. Send data
5. Accept server response
6. Close the socket

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();
    }
}

Server:
1. Create service address and port fields
2. Create socket 3.
Bind server address and port
4. Start listening
5. Process client connection in new thread
6. Send and receive data
7. Send response to client

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();
        }
    }
}

Guess you like

Origin blog.csdn.net/weixin_44047050/article/details/131329267