您现在的位置是: 软件 > 开发者网络 > 程序方舟 > Java专栏 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-MediaStudio Pro 6.5教程
-三款卸载软件最新试用
-基于Visual C++的Winsock API研究
-如何编写高质量的VB代码

Java套接字编程(下)
2003-01-11· ·crystal编译··yesky

1 2 3  下一页

  自寻址套接字(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文档。

1 2 3  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 Java套接字编程
 漫谈Java中的中文问题
 浅析Java与C#的事件处理机制
 JavaBeans和关系数据库的镜像
 Java模式设计之多态模式与多语言支持
 开发Java的又一利器-Visual Cafe
 通过E-mail 共享Java 对象
 MD5的Java Bean实现
 动态Proxy与Java ACL用户访问控制机制实现
 Java多线程程序设计入门
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!