转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
Java套接字编程(下)         ★★★★

Java套接字编程(下)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:660 更新时间:2009/4/22 23:27:38
  自寻址套接字(Datagram Sockets)

  ,因为使用流套接字的每个连接均要花费一定的时间,要减少这种开销,网络API提供了第二种套接字:自寻址套接字(datagram socket),自寻址使用UDP发送寻址信息(从客户程序到服务程序或从服务程序到客户程序),不同的是可以通过自寻址套接字发送多IP信息包,自寻址信息包含在自寻址包中,此外自寻址包又包含在IP包内,这就将寻址信息长度限制在60000字节内。图2显示了位于IP包内的自寻址包的自寻址信息。


  与TCP保证信息到达信息目的地的方式不同,UDP提供了另外一种方法,如果自寻址信息包没有到达目的地,,那么UDP也不会请求发送者重新发送自寻址包,这是因为UDP在每一个自寻址包中包含了错误检测信息,在每个自寻址包到达目的地之后UDP只进行简单的错误检查,如果检测失败,UDP将抛弃这个自寻址包,也不会从发送者那里重新请求替代者,这与通过邮局发送信件相似,发信人在发信之前不需要与收信人建立连接,同样也不能保证信件能到达收信人那里

  自寻址套接字工作包括下面三个类:DatagramPacket, DatagramSocket,和 MulticastSocket。DatagramPacket对象描绘了自寻址包的地址信息,DatagramSocket表示客户程序和服务程序自寻址套接字,MulticastSocket描绘了能进行多点传送的自寻址套接字,这三个类均位于java.net包内。

  DatagramPacket类

  在使用自寻址包之前,你需要首先熟悉DatagramPacket类,地址信息和自寻址包以字节数组的方式同时压缩入这个类创建的对象中

  DatagramPacket有数个构造函数,即使这些构造函数的形式不同,但通常情况下他们都有两个共同的参数:byte [] buffer 和 int length,buffer参数包含了一个对保存自寻址数据包信息的字节数组的引用,length表示字节数组的长度。

  最简单的构造函数是DatagramPacket(byte [] buffer, int length),这个构造函数确定了自寻址数据包数组和数组的长度,但没有任何自寻址数据包的地址和端口信息,这些信息可以后面通过调用方法setAddress(InetAddress addr)和setPort(int port)添加上,下面的代码示范了这些函数和方法。

byte [] buffer = new byte [100];
DatagramPacket dgp = new DatagramPacket (buffer, buffer.length);
InetAddress ia = InetAddress.getByName ("www.disney.com");
dgp.setAddress (ia);
dgp.setPort (6000); // Send datagram packet to port 6000.
  如果你更喜欢在调用构造函数的时候同时包括地址和端口号,可以使用DatagramPacket(byte [] buffer, int length, InetAddress addr, int port)函数,下面的代码示范了另外一种选择。

byte [] buffer = new byte [100];
InetAddress ia = InetAddress.getByName ("www.disney.com");
DatagramPacket dgp = new DatagramPacket (buffer, buffer.length, ia,
6000);
  有时候在创建了DatagramPacket对象后想改变字节数组和他的长度,这时可以通过调用setData(byte [] buffer) 和 setLength(int length)方法来实现。在任何时候都可以通过调用getData() 来得到字节数组的引用,通过调用getLength()来获得字节数组的长度。下面的代码示范了这些方法:

byte [] buffer2 = new byte [256];
dgp.setData (buffer2);
dgp.setLength (buffer2.length);
  关于DatagramPacket的更多信息请参考SDK文档。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台