首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java Socket编程(2)Socket基础

2012-09-01 
Java Socket编程(二)Socket基础二、Socket基础1.地址的获得private static final int ECHOMAX 255 publi

Java Socket编程(二)Socket基础

二、Socket基础

1.地址的获得

private static final int ECHOMAX = 255; public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket(7);DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX);while (true) {socket.receive(packet);System.out.println("Handling client at " + packet.getAddress());socket.send(packet);packet.setLength(ECHOMAX);}}
通过这个例子与之前TCP的实例进行比较,有如下区别:
A.DatagramSocket在创建时不需要指定目的地址,因为UDP不需要建立连接,每个数据报文都可以发送或接收于不同的目的地址。
B.如果像TCP一样在read()上阻塞等待,将可能永远阻塞在那里,因为UDP协议只是简单地扩展了IP协议,UDP报文可能丢失掉。所以一定要设置阻塞等待的超时时间。
C.UDP协议保留了消息的边界信息,每次receive()调用最多只能接收一次send()方法调用所发送的数据。
D.一个UDP报文DatagramPacket能传输的最大数据是65507字节,超出部分的字节将自动被丢弃,而且对接收程序也没有任何的提示。因此缓存数组可以设置成65000字节左右是安全的。
E.如果反复使用同一个DatagramPacket实例调用receive()方法,每次调用前都必须显式地将消息的内部长度重置为缓存区的实际长度。

热点排行