unity socket udp 连接

使用此方法有助于udp在局域网内稳定的连接运行,已经过验证,为了保持彻底的稳定,可以考虑加入ping-pang进行网络处理,如果为了安全,请使用加密TCP

如果您要在大规,大项目的游戏中使用网络技术,建议您使用:mirror,请仔细阅读下代码再进行修改,它的网络构成比较完善,但可能不太适合您的项目,仅供参考

mirror 使用比较完善的kcp技术,如果您想要了解kcp请进行网络搜索,非常建议您访问:github进行学习

 

public class NetSever : GloabManager
{
    private static NetSever _instance;
    public static NetSever Instance
    {
        get
        {
            if (_instance == null)
                _instance = new NetSever();
            return _instance;
        }
    }


    public int connectPort;
    //private Socket socket;
    private EndPoint clientEnd;
    private Thread connectThread;
    public string hostIp = null;
    public Action UI_OutlinemodeData_GameOver;
    public Text YuYinShiBie;
    public Text IP;

    public bool capture;
    public bool ColorData = false;
    public int PlayID;

    public Queue LogQueue = new Queue();


    UdpClient udpClient;
    IPEndPoint ipEnd;


    public override void Start()
    {
        base.Start();
        //初始化协议
        if (GetIP() == "")
        {
            Debug.LogError("当前IP地址不存在,或没有信号进行连接!");
            return;
        }
        udpClient = new UdpClient();
        udpClient.EnableBroadcast = true;
        connectPort = 6000;
        开启一个线程
        connectThread = new Thread(new ThreadStart(SocketReceive));
        Thread.Sleep(1000);
        connectThread.Start();
        //SendAllStart("Start+90");
    }


    public override void Update()
    {
        base.Update();
        SendMessanger();
    }

    string GetIP()
    {
        //本机名 
        string hostName = Dns.GetHostName();
        //会返回所有地址,包括IPv4和IPv6
        IPAddress[] addressList = Dns.GetHostAddresses(hostName);
        foreach (IPAddress ip in addressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
            {
                return ip.ToString();
            }
        }
        return "127.0.0.1";
    }


    void SocketReceive()
    {
        UdpClient udpClient = new UdpClient(connectPort);
        try
        {
            Debug.Log("Listening for port " + connectPort + ":" + GetIP());
            IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
            while (true)
            {
                byte[] recvData = udpClient.Receive(ref remoteIpEndPoint);
                string recvStr = Encoding.UTF8.GetString(recvData);
                LogQueue.Enqueue(recvStr);
                Debug.LogError(recvStr);
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            udpClient.Close();
        }

    }
    void SendMessanger()
    {
        if (LogQueue.Count <= 0) return;
        string strArray = LogQueue.Dequeue() as string;

        //注意:此处向下处理数据,请结合项目实际

        if (strArray.Contains("+"))
        {
            var _str = strArray.Split('+');
            if (_str[0] != string.Empty)
            {
                switch (_str[0])
                {
                   
                }
            }
        }
        else
        {
            Debug.LogError("收到的信息不正确");
        }
    }


    public void SendAllStart(string content)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(content);
        udpClient.Send(bytes, bytes.Length, new IPEndPoint(IPAddress.Broadcast, connectPort));
    }
}

相关推荐

  1. 连接字符串

    2024-04-20 12:32:05       37 阅读
  2. ssh连接

    2024-04-20 12:32:05       12 阅读
  3. SSH 连接与RDP连接

    2024-04-20 12:32:05       30 阅读
  4. android WiFI连接,socket连接

    2024-04-20 12:32:05       22 阅读
  5. Mysql:交叉连接、内连接

    2024-04-20 12:32:05       13 阅读
  6. 连接和外连接

    2024-04-20 12:32:05       5 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 12:32:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 12:32:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 12:32:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 12:32:05       18 阅读

热门阅读

  1. 数据仓库—维度建模—事实表设计

    2024-04-20 12:32:05       17 阅读
  2. 如何防范XSS?

    2024-04-20 12:32:05       19 阅读
  3. WEB前端常规技术面试题之HTML+CSS基础

    2024-04-20 12:32:05       14 阅读
  4. centos安装mysql并设置远程访问

    2024-04-20 12:32:05       35 阅读
  5. Unity WebGL 2020 Release-Notes

    2024-04-20 12:32:05       22 阅读
  6. Mongodb

    Mongodb

    2024-04-20 12:32:05      18 阅读
  7. C++|list的模拟实现

    2024-04-20 12:32:05       14 阅读