[C#] 纯文本查看 复制代码using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Net;
using System.Net.Sockets;
using UnityEngine.UI;
namespace ImmerUDP
{
public class GameUdpManager : MonoBehaviour
{
[Header("本地端口"),SerializeField]
private int localPort = 6666;
[Header("目标端口"), SerializeField]
private int endPort = 8888;
[Header("打开接受功能")]
public bool openReceive = true;
[Header("打开发送功能")]
public bool openSend = true;
//服务器端Scoket对象;
private Socket serverSocket;
//udp客户端socket
private UdpClient client;
private EndPoint epSender;
private IPEndPoint endpoint;
//接受数据的字符数组
private byte[] ReceiveData = new byte[1024];
public static GameUdpManager Instance;
private void Awake()
{
Instance = this;
}
// Use this for initialization
void Start()
{
if (openReceive)
{
//服务器Socket对象实例化
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//Socket对象跟服务器端的IP和端口绑定
serverSocket.Bind(new IPEndPoint(IPAddress.Any, localPort));
//监听的端口和地址
epSender = (EndPoint)new IPEndPoint(IPAddress.Any, 0);
//开始异步接受数据
serverSocket.BeginReceiveFrom(ReceiveData, 0, ReceiveData.Length, SocketFlags.None, ref epSender, new AsyncCallback(ReceiveFromClients), epSender);
}
if (openSend)
{
client = new UdpClient();
//目标端口和地址
endpoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), endPort);
}
}
///
/// 异步接受,处理数据
///
///
private void ReceiveFromClients(IAsyncResult iar)
{
int reve = serverSocket.EndReceiveFrom(iar, ref epSender);
//数据处理
string str = System.Text.Encoding.UTF8.GetString(ReceiveData, 0, reve);
//把得到数据传给数据处理中心
// NetworkDataHandler.Instance.NetworkDataUpdate(str);
serverSocket.BeginReceiveFrom(ReceiveData, 0, ReceiveData.Length, SocketFlags.None, ref epSender, new AsyncCallback(ReceiveFromClients), epSender);
}
///
/// 发送数据
///
/// str 数据
public void Send(string dataStr)
{
if (!openSend) return;
byte[] SendData = System.Text.Encoding.UTF8.GetBytes(dataStr);
client.Send(SendData, SendData.Length, endpoint);
}
}
}