`

udp通讯

阅读更多

服务器

 void Start()
        {
            InitNet();
        }

        Thread myThread;
        public void InitNet()
        {
            IAsyncResult result = null;

            result = InitUdpNet();

            if (result == null)
                return;
            bool success = result.AsyncWaitHandle.WaitOne(5000, true);
            if (!success)
            {
                //超时
                NetClosed();
                Debug.Log("connect Time Out    Net will reconnect");
                InitNet();
            }
            else
            {
                //与socket建立连接成功,开启线程接受服务端数据。
                // worldpackage = new List<JFPackage.WorldPackage>();
                myThread = new Thread(new ThreadStart(ReceiveSorket));
                myThread.IsBackground = true;
                myThread.Start();
            }
        }
        private void ReceiveSorket()
        {
            while (true)
            {
                byte[] data = new byte[1024];
                //发送接受信息
                recv = newsock.ReceiveFrom(data, ref Remote);
                Debug.Log(Encoding.Unicode.GetString(data, 0, recv));
                newsock.SendTo(data, recv, SocketFlags.None, Remote);
            }
        }

        private IAsyncResult InitUdpNet()
        {
            //得到客户机IP
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, port);
            newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //绑定网络地址
            newsock.Bind(sender);
                    
            Remote = (EndPoint)(sender);
          
            IAsyncResult result = newsock.BeginConnect(Remote, new AsyncCallback(connectCallback), newsock);
            return result;
        }

        private void connectCallback(IAsyncResult asyncConnect)
        {
            Debug.LogError("connectSuccess");

        }
        int recv;
        Socket newsock;
        EndPoint Remote;
        int port = 8001;

        string stringData;
        // 发送消息
        public void SendUdpBroadcasts()
        {
            //Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint sender = new IPEndPoint(IPAddress.Broadcast, port);
            EndPoint Remote = (EndPoint)sender;
            newsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);//设置该scoket实例的发送形式
            string request = "你好,TEST SEND!";//初始化需要发送而的发送数据
            byte[] buffer = Encoding.Unicode.GetBytes(request);
            newsock.SendTo(buffer, Remote);
        }

        public void SendUdp(string str)
        {
            byte[] data = new byte[1024];
            data = Encoding.Unicode.GetBytes(str);
            newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
        }
	
		//关闭Socket
        public void NetClosed()
        {
            // Debuger.LogError("NetClosed");
            if (newsock != null)
            {
                if (newsock.Connected)
                {
                    newsock.Shutdown(SocketShutdown.Both);
                    newsock.Close();
                }
            }
            newsock = null;

        }


        void OnDestroy()
        {
            NetClosed();
        }

 客户端:

 // Use this for initialization
    void Start()
    {
        InitNet();
    }

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

    }

    Socket server;
    EndPoint Remote;
    string input, stringData;

    public void InitNet()
    {
        //获取本机可用IP地址
        byte[] data = new byte[1024];
       


        Debug.Log("This is a Client, host name is {0}"+ Dns.GetHostName());

        //设置服务IP,设置TCP端口号
        IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.0.131"), 8001);

        //定义网络类型,数据连接类型和网络协议UDP
        server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        server.Bind(ipep);
        string welcome = "Hello! ";
        data = Encoding.ASCII.GetBytes(welcome);
        server.SendTo(data, data.Length, SocketFlags.None, ipep);
        IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        Remote = (EndPoint)sender;

        data = new byte[1024];
        //对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制
        //server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100);
        recv = server.ReceiveFrom(data, ref Remote);
        Debug.Log("Message received from {0}: "+ Remote.ToString());
        Debug.Log(Encoding.ASCII.GetString(data, 0, recv));
        myThread = new Thread(new ThreadStart(ReceiveSorket));
        myThread.IsBackground = true;
        myThread.Start();
    }

    Thread myThread;
    int recv;
    IPEndPoint remote;
    //接收数据
    private void ReceiveSorket()
    {
        while (true)
        {
           // server.SendTo(Encoding.ASCII.GetBytes("你是谁"), Remote);
            byte[] data = new byte[1024];
            recv = server.ReceiveFrom(data, ref Remote);
            stringData = Encoding.Unicode.GetString(data);
            Debug.Log(stringData);
        }
            
    }


    // 发送消息
    public void SendUdp()
    {

        server.SendTo(Encoding.Unicode.GetBytes("你是谁"), Remote);

    }
  
    //关闭Socket
    public void NetClosed()
    {
        // Debuger.LogError("NetClosed");
        if (server != null)
        {
            server.Close();
        }
        server = null;
   


    }


    void OnDestroy()
    {
        NetClosed();
    }

 

分享到:
评论

相关推荐

    UDP通讯veristand工程建立教程.docx

    UDP通讯veristand工程建立教程 UDP通讯veristand工程建立教程是关于如何使用UDP通讯协议在veristand工程中建立通讯模型的教程。本教程主要介绍了如何使用Simulink建立UDP Send模型和UDP Receive模型,并且如何在...

    倍福UDP通讯例程_Basic.rar

    在工业自动化领域,尤其是在使用倍福(Beckhoff)设备时,UDP通讯常用于快速、实时的数据交换,尤其适用于那些对数据丢失不敏感的应用场景。 在倍福的控制系统中,如基于Windows操作系统的CX系列控制器或PC-based的...

    FINS-UDP通讯测试

    本话题聚焦于使用FINS-UDP通讯协议进行LABVIEW(Laboratory Virtual Instrument Engineering Workbench)与OMRON PLC之间的通信测试。 首先,我们要理解FINS-UDP通讯的基本原理。FINS协议设计的目的是简化设备间的...

    X-Plane11UDP通讯说明文档(中文翻译版,以及英文原版)

    《X-Plane 11 UDP通讯说明文档》是针对飞行模拟软件X-Plane 11进行插件开发的重要参考资料,提供了详细的UDP通讯协议规范。UDP(User Datagram Protocol)是一种无连接的传输层协议,常用于实时应用,如游戏和视频流...

    UDP通讯,udp通讯协议,LabView

    在这个基于LabVIEW编写的UDP通讯实例中,包含了两个关键的VI(Virtual Instruments):UDP发送.vi和UDP接收.vi。这两个VI分别对应了UDP协议中的发送和接收功能。 1. UDP发送.vi:这个VI主要用于构造和发送UDP数据包...

    Labview局域网UDP通讯-发送接收数组字符串.zip

    在本案例中,"Labview局域网UDP通讯-发送接收数组字符串.zip"是一个包含Labview子程序的压缩包,专门用于实现局域网内的UDP通信。UDP(User Datagram Protocol)是传输层的一种无连接协议,常用于实时数据传输,因为...

    C# winform UDP通讯

    标题中的"C# winform UDP通讯"指的是使用C#编程语言,在Visual Studio 2012环境下开发Windows桌面应用(WinForm)时,实现基于UDP协议的网络通信功能。UDP是一种无连接、不可靠的传输协议,它以小的数据包(称为数据...

    两台电脑之间的UDP通讯 实例

    在两台电脑之间进行UDP通讯时,我们通常会利用编程接口,如Windows Socket(简称Winsock),来实现数据的发送和接收。本实例主要探讨如何使用Winsock控件在两台电脑上实现UDP通信。 首先,我们需要了解Winsock的...

    基于OPC客户端和UDP通讯协议的无连接数据转发软件.rar

    标题中的“基于OPC客户端和UDP通讯协议的无连接数据转发软件”指的是一个利用VB(Visual Basic)编程语言开发的应用程序,该程序设计用于在OPC(OLE for Process Control)客户端与UDP(User Datagram Protocol)...

    UDP通讯调试助手

    UDP通讯调试助手是一款基于C#语言并利用Visual Studio(VS)开发环境编写的工具,主要目的是帮助初学者理解和调试UDP(User Datagram Protocol)网络通信。UDP是一种无连接、不可靠的传输层协议,广泛用于实时数据...

    C++UDP通讯类(兼容window和linux)

    C++ UDP通讯类的实现通常是围绕`socket` API进行的,这个API在不同操作系统上具有一定的共通性,但也存在一些差异,如套接字创建、绑定、发送和接收函数的使用。 在Windows平台上,通常使用`Winsock2`库来实现网络...

    基于C#的简单UDP通讯程序

    本项目“基于C#的简单UDP通讯程序”旨在介绍如何使用C#实现基于UDP协议的简单通信。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,常用于实时数据传输,如在线视频、语音聊天等。 首先,我们要...

    STM32+w5500 UDP通讯

    STM32+w5500 UDP通讯是一种在嵌入式系统中实现网络通信的方法,它结合了STM32微控制器和W5500网络接口芯片。STM32F103是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M3内核的微控制器,具有丰富的...

    TCP UDP 通讯VB源码

    在这个“TCP UDP 通讯VB源码”中,我们可以深入理解如何在VB环境下实现这两种协议的通信。 TCP是一种面向连接的、可靠的协议,它确保数据包按顺序无损地传输。在VB中实现TCP通信,首先需要导入`System.Net.Sockets`...

    Socket的TCP、UDP通讯

    在标题和描述中提到的“Socket的TCP、UDP通讯”涵盖了两种主要的传输层协议:TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。 **TCP(传输控制协议)**是一种面向连接的、可靠的、基于字节...

    c# UDP通讯例子

    首先,我们来看一下标题提及的"C# UDP通讯例子"。在C#中,我们可以使用System.Net.Sockets命名空间中的UdpClient类来实现UDP通信。UdpClient提供了发送和接收UDP数据报的功能,它的工作方式是基于数据报的,每个数据...

    C#版UDP通讯

    【C#版UDP通讯】是基于Visual Studio 2010开发环境的一种网络通信技术,主要利用了UDP(User Datagram Protocol)协议。UDP是一种无连接的、不可靠的传输层协议,它在互联网协议栈中提供了快速的数据传输服务。与TCP...

    欧姆龙通讯.zip_FINS_UDP fins_UDP FINS_欧姆龙UDP_欧姆龙udp通讯

    《欧姆龙通讯.zip——FINS UDP协议与PLC链接详解》 在工业自动化领域,欧姆龙(Omron)PLC(可编程逻辑控制器)因其稳定性和灵活性被广泛使用。其中,FINS(Factory Integrated Network System)协议是欧姆龙网络...

    ibaPDA-Interface-S7-TCP_UDP通讯配置实例源码

    资源名:ibaPDA-Interface-S7-TCP_UDP通讯配置实例源码 资源类型:程序源代码 源码说明: ibaPDA-Interface-S7-TCP_UDP通讯配置实例西门子plc配置实例 ibaPDA-Interface-S7-TCP_UDP通讯配置实例,西门子plc配置...

    UDP通讯 c#与labview源码

    总结来说,"UDP通讯 c#与labview源码"涉及的知识点主要包括: 1. UDP协议的基础原理和特性。 2. C#中利用UdpClient类进行UDP通信的方法。 3. LabVIEW中通过“网络通信”函数库实现UDP通信的步骤。 4. C#与LabVIEW...

Global site tag (gtag.js) - Google Analytics