A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

udp

© 漪顿 中级黑马   /  2013-8-16 10:53  /  1190 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 漪顿 于 2013-8-18 12:13 编辑

  //1.建立UDP服务,使用DatagramSocket
                DatagramSocket ds = new DatagramSocket();
               
                //2.将要发送的数据封装到数据包中
                String str = "hello udp";
                //使用DatagramPack 将数据打包到文件中
                byte [] buf = str.getBytes();
                //其中new DatagramPacket(数组, 长度,地址,端口号);
                DatagramPacket dp =
        new DatagramPacket(buf, buf.length,InetAddress.getByName("127.168.1.125"),10000);
               
                //3.发送数据,通过UDP中的send方法,将数据发送出去
                ds.send(dp);
               
                //4.关闭资源
                ds.close();

——————————————————
关闭资源是因为调用了底层资源,所以ds.close();但是封装数据包时,有没有调用资源
也就是说 DatagramPacket dp为什么不用dp.close();

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 兜兜转转 于 2013-8-16 11:30 编辑

调用底层资源,怎么理解呢?肯定是有个东西去调用吧,那么谁调用呢?拿IO来将,任何操作底层资源的都是流,你要是把流给关了,那么资源就不在内存中挂起了,就安全,资源被释放吧。

FileInputStream fis = new FileInputStream(“D:\\1.TXT”);
就拿这句话来理解,fis 这个流是用来操作底层资源1.TXT(1.TXT是磁盘上的一个文件,当然是底层资源的),资源怎么会具备关闭的功能呢,只有流才有关闭和开启操作资源的功能吧,你直接把fis给close了,资源不就释放了吗?
然后回到ds 和dp,dp只是一个数据包,好比这里的底层资源,ds只是一个发送和接受包的服务站,好比IO流,你直接把与dp关联的那个ds关了,那个资源不也就释放了吗?

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

回复 使用道具 举报
ds是用作发送或接收数据用的套接字。相当于邮局,dp只是数据包,数据和地址在数据包中指定,相当于包裹。ds创建时系统会分配一个端口,或指定端口,占用内存,ds发送数据时,调用底层网卡的资源将数据发送到指定地址。不过不关的话就占用系统资源了,就相当于邮局派出一辆车送包裹,结果快递员把包裹送完了,车没开回邮局自己留着用了,资源就浪费了。
dp没有上面的特征,只是一个数据包。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马