黑马程序员技术交流社区
标题:
udp
[打印本页]
作者:
漪顿
时间:
2013-8-16 10:53
标题:
udp
本帖最后由 漪顿 于 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();
作者:
兜兜转转
时间:
2013-8-16 11:27
本帖最后由 兜兜转转 于 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关了,那个资源不也就释放了吗?
作者:
HM王琦
时间:
2013-8-16 18:51
ds是用作发送或接收数据用的套接字。相当于邮局,dp只是数据包,数据和地址在数据包中指定,相当于包裹。ds创建时系统会分配一个端口,或指定端口,占用内存,ds发送数据时,调用底层网卡的资源将数据发送到指定地址。不过不关的话就占用系统资源了,就相当于邮局派出一辆车送包裹,结果快递员把包裹送完了,车没开回邮局自己留着用了,资源就浪费了。
dp没有上面的特征,只是一个数据包。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2