c语言编程笔录

首页 > 知识科普

知识科普

C#中Socket与Unity相结合示例代码

前言

在C#中使用Socket与Unity相结合是一种常见的开发方式,可以实现网络通信和多人游戏等功能。本文将给出一个示例代码,介绍如何在Unity中利用C#的Socket编写代码,实现基本的网络通信功能。

示例代码

以下是一个基于C#中Socket与Unity的示例代码:

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

public class SocketClient : MonoBehaviour
{
    private const string IP = "127.0.0.1";
    private const int Port = 8888;

    private Socket clientSocket;

    private byte[] receiveBuffer = new byte[1024];

    private void Start()
    {
        ConnectToServer();
    }

    private void ConnectToServer()
    {
        clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        try
        {
            clientSocket.Connect(IPAddress.Parse(IP), Port);
            Debug.Log("Connected to server!");
        }
        catch (Exception ex)
        {
            Debug.Log($"Failed to connect to server! Exception: {ex}");
        }

        clientSocket.BeginReceive(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, OnReceiveCallback, null);
    }

    private void OnReceiveCallback(IAsyncResult ar)
    {
        int bytesRead = clientSocket.EndReceive(ar);

        if (bytesRead > 0)
        {
            byte[] receivedData = new byte[bytesRead];
            Buffer.BlockCopy(receiveBuffer, 0, receivedData, 0, bytesRead);

            string receivedMessage = System.Text.Encoding.UTF8.GetString(receivedData);
            Debug.Log($"Received message: {receivedMessage}");
        }

        clientSocket.BeginReceive(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, OnReceiveCallback, null);
    }

    public void SendMessageToServer(string message)
    {
        byte[] sendData = System.Text.Encoding.UTF8.GetBytes(message);
        clientSocket.Send(sendData);
    }

    private void OnDestroy()
    {
        clientSocket.Close();
    }
}

代码说明

上述代码是一个SocketClient类,使用了Unity的MonoBehaviour类进行更新和事件处理。以下是代码功能的解释:

  • 首先定义了服务器的IP地址(IP)和端口号(Port)。
  • 在Start方法中调用ConnectToServer方法,实现连接到服务器的功能。
  • ConnectToServer方法中创建了一个Socket对象,使用Connect方法连接到服务器,并通过BeginReceive方法开始异步接收服务器发送的数据。
  • 在OnReceiveCallback方法中,当接收到服务器发送的数据时,将其转换为字符串,并使用Debug.Log输出。
  • SendMessageToServer方法用于向服务器发送消息,将消息转换为字节数组后通过Send方法发送。
  • OnDestroy方法在对象销毁时调用,关闭Socket连接。

总结

通过以上示例代码,可以在Unity中使用C#的Socket实现与服务器的通信。开发者可以根据自己的需求,进一步扩展和优化代码,实现更复杂的网络功能。希望本文对你有所帮助!