游戏蛮牛学习群(纯技术交流,不闲聊):539178957
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2236

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 201|回复: 2

[薛飞] C#UDP广播的发送与接收

[复制链接]  [移动端链接]
排名
731
昨日变化
3

16

主题

173

帖子

2802

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
12
蛮牛币
3627
威望
0
注册时间
2013-7-4
在线时间
1085 小时
最后登录
2018-6-24

专栏作家社区QQ达人

QQ
发表于 2018-5-31 14:22:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
发送端代码
[C#] 纯文本查看 复制代码
using System.Net;
using System.Net.Sockets;
using System.Text; 
using System.Timers;
using UnityEngine;

public class UDPServer : MonoBehaviour
{
    UdpClient client;
    IPEndPoint endpoint;
    
    int port = 7788;

    byte[] msg;

    Timer timer;

    // Use this for initialization
    void Start()
    {
        timer = new Timer();
        timer.Interval = 2000;
        timer.Elapsed += new ElapsedEventHandler(SendMsg);
        timer.Start();

        string localIp = GetLocalIP();
        Debug.Log("localIp:" + localIp);
//本机的ip地址
        client = new UdpClient(new IPEndPoint(IPAddress.Parse(localIp), 0));

        endpoint = new IPEndPoint(IPAddress.Broadcast, port);
         
        msg = Encoding.UTF8.GetBytes("server:"+localIp); 
    } 
      
    /// <summary>
    /// 向局域网内所有的主机发送消息
    /// </summary>
    /// <param name="sendStr"></param>
    private void SendMsg(object source, ElapsedEventArgs e)
    { 
        if(null != msg)
        {
            if (msg.Length > 0)
            {
                client.Send(msg, msg.Length, endpoint);
                //SendMsg("哈啊哈哈!");
            }
        } 
    } 

    public void SendMsg(string ctrlMsg)
    {
        byte [] bf = Encoding.UTF8.GetBytes("ctrl:" + ctrlMsg);
        client.Send(bf, bf.Length, endpoint);
    }

    void OnApplicationQuit()
    {
        Debug.Log("OnApplicationQuit");
        if (null != timer)
        {
            timer.Stop();
            timer = null;
        }
        if (null != client)
        {
            client.Close();
            client = null;
        }
    }
  
    /// <summary>
    /// 获取本机ip
    /// </summary>
    /// <returns></returns>
    string GetLocalIP()
    {
        string strHostName = Dns.GetHostName();
        IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
        IPAddress[] addr = ipEntry.AddressList;
        string ip = "";
        foreach(IPAddress ipd in addr)
        {
            if(ipd.ToString().Contains("."))
            {
                ip = ipd.ToString();
            }
        }
        return ip; 
    }
}



接收端代码
[C#] 纯文本查看 复制代码
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine; 

public class UDPClient : MonoBehaviour
{ 
    Thread RcvThread = null;
    UdpClient client;
    IPEndPoint endpoint;
    int port = 7788;

    // Use this for initialization
    void Start()
    { 
        client = new UdpClient(new IPEndPoint(IPAddress.Any, port));
        endpoint = new IPEndPoint(IPAddress.Any, 0);

        RcvThread = new Thread(new ThreadStart(RcvMsg));
        RcvThread.IsBackground = true;
        RcvThread.Start();
        Debug.Log("Start");
    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnApplicationQuit()
    {
        Debug.Log("OnApplicationQuit");
        if (RcvThread != null)
        {
            if (RcvThread.IsAlive)
            {
                RcvThread.Abort();
                RcvThread = null;
            }
        }
        client.Close();
    }

    /// <summary>
    /// 接收来自固定端口的消息
    /// </summary>
    private void RcvMsg()
    {
        while (true)
        { 
            byte[] buf = client.Receive(ref endpoint);
            string msg = Encoding.UTF8.GetString(buf);
            if (string.IsNullOrEmpty(msg))
            {

            }
            else
            {
                string[] s = msg.Split(':'); 
                Debug.Log(msg);
            } 
        }
    }

}



回复

使用道具 举报

0

主题

21

帖子

36

积分

Rank: 1

UID
204316
好友
0
蛮牛币
4
威望
0
注册时间
2017-1-24
在线时间
16 小时
最后登录
2018-6-24
发表于 2018-5-31 19:12:15 | 显示全部楼层
还不错
Thanks for sharing!

回复 支持 反对

使用道具 举报

5熟悉之中
993/1000
排名
2536
昨日变化

0

主题

244

帖子

993

积分

Rank: 5Rank: 5

UID
147717
好友
0
蛮牛币
1154
威望
0
注册时间
2016-5-5
在线时间
243 小时
最后登录
2018-6-23
发表于 2018-6-5 13:52:44 | 显示全部楼层
还不错 Thanks for sharing!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表