局域网内实现帮我写一篇 Unity的UDP通信脚本,要求接收和发送使用同一个端口号
时间: 2024-09-19 17:13:58 浏览: 41
Untiy Udp局域网通信整理
在Unity中实现局域网络内的UDP通信,我们可以创建一个简单的脚本来处理数据收发,通常使用`NetworkStream`或者第三方库如`UdpClient`。下面是一个基本的示例,展示了如何创建一个接收器和发送者,它们都使用相同的端口号:
```csharp
using System.Net;
using UnityEngine;
public class NetworkCommunication : MonoBehaviour
{
// UDP配置
public int localPort = 8080; // 接收和发送的公共端口
private UdpClient udpClient;
void Start()
{
// 初始化UDP客户端
udpClient = new UdpClient(localPort);
Debug.Log("UDP Client started on port " + localPort);
// 开始接收数据
StartListening();
}
void OnApplicationQuit()
{
// 游戏退出前关闭UDP连接
udpClient.Close();
}
void StartListening()
{
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, localPort); // 指向本地地址,任何IP和指定端口
udpClient.BeginReceive(ref receivedData, 0, receiveBufferSize, endpoint, new AsyncCallback(ReceiveCallback), null);
}
private byte[] receivedData;
private const int receiveBufferSize = 1024; // 接收缓冲区大小
private void ReceiveCallback(IAsyncResult result)
{
try
{
// 获取收到的数据和远程信息
byte[] data = udpClient.EndReceive(result, ref remoteEndpoint);
string message = System.Text.Encoding.ASCII.GetString(data);
// 处理接收到的消息
Debug.Log("Received message: " + message);
// 发送响应
SendResponse(message);
}
catch (Exception e)
{
Debug.LogError(e.Message);
}
// 继续监听
StartListening();
}
void SendResponse(string inputMessage)
{
byte[] response = System.Text.Encoding.ASCII.GetBytes(inputMessage + " - Sent from " + gameObject.name);
udpClient.Send(response, response.Length, remoteEndpoint);
}
// 当你想发送消息时,可以在某个事件或函数里调用SendResponse
public void SendMessageToAll(string message)
{
SendResponse(message);
}
private IPEndPoint remoteEndpoint;
}
// 使用场景:游戏中的玩家可以互相发送文字消息,或者服务器向所有连接的客户端广播信息
```
阅读全文