zoukankan      html  css  js  c++  java
  • 对于UDP的一些心得

    最近电信那个平台差不多要结束了。其中udp进行总结一下。很简单。

    对于程序,你想接收UDP还是发送UDP都必须建立一个
    System.Net.Sockets.UdpClient。

    建立这个对象时需要配置其ip地址及其端口。 一般通过

    System.Net.Sockets.UdpClient udpClient = new System.Net.Sockets.UdpClient(new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 9000))
    实现。IPEndPoint是C#网络节点类,其包括IP地址与端口。

    完了之后还需要配置收发缓存:(如果有数据溢出了缓存,结果,自己想)

                udpClient.Client.ReceiveBufferSize = 2 * 1024 * 1024;
                udpClient.Client.SendBufferSize 
    = 2 * 1024 * 1024;

    完事了就开始进行收发了。

    发送:
    发送需要将数据装换为Byte[]类型(我不喜欢叫它数组,就像字符串我们从来不叫它数组一样),一般通过它实现

    byte[] sendByte = System.Text.Encoding.Default.GetBytes(MSG_CONTENT);
    下面就是把这些二进制位送到网线那头去。
     udpClient.Send(sendByte, sendByte.Length, new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 9001));
    这里说明一下,由于我在本机上实现的收发,所以用2个端口模拟收发的2头,一个9000,一个是9001。
    上面的话最后就是指向我要发送过去的地址。

    接收:
    接收更简单:

                IPEndPoint iPEndPoint = null;
                
    byte[] receive;
                receive 
    = udpClient.Receive(ref iPEndPoint);
                
    //读取UDP端口内容
                string receiver = System.Text.Encoding.Default.GetString(receive);
    如果有人通过上面发送的方法给你发送了数据,你只要通过如上代码接收就OK了。iPEndPoint 就是告诉程序,谁发给我的,发件人地址。Receive是否具有接收事件我不清楚,我通过线程不停的进行读取。顺便说一下,如果没有数据而执行了Receive,那么当前的线程会被挂起,直到等到有人给这个端口发送了数据才会继续执行(知道我为啥要用线程了吧)。


    最后记得在使用后关闭连接,() 

     udpClient.Close();
    我一般把udp作为主窗体类的一个成员变量——属性,所以通常在主窗体类的close事件里执行此语句。呵呵。
  • 相关阅读:
    ClouderaManager之CDH-LZO配置
    【转】二叉树、B树、B-树、B+树、B*树
    【转】MySQL索引原理及慢查询优化
    【转】Hadoop安全实践
    多线程中的Lock小结
    Hive学习笔记——基本配置及测试
    Linux下安装MySQL
    Java中的弱引用
    Java反射小结
    Linux下配置Hadoop全分布式环境
  • 原文地址:https://www.cnblogs.com/edzjx/p/1445214.html
Copyright © 2011-2022 走看看