快速业务通道

Java网络编程基础(三) Datagram类使用方法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
的主机端口号。

Java网络编程基础(三) Datagram类使用方法(2)

时间:2010-12-15

发送和接收数据包还需要发送和接收数据包的套接字,即DatagramSocket对象,DatagramSocket套接字在本地机器端口监听是否有数据到达或者将数据包发送出去。其构造方法如下。

public DatagramSocket() 用本地机上任何一个可用的端口创建一个套接字,这个端口号是由系统随机产生的。使用方法如下:

try{ DatagramSocket datas=new DatagramSocket( ); //发送数据包 } catch(SocketException e){ }

这种构造方法没有指定端口号,可以用在客户端。如果构造不成功则触发SocketException异常。

public DatagramSocket(int port)

用一个指定的端口号port创建一个套接字。

当不能创建套接字时就抛出SocketException异常,其原因是指定的端口已被占用或者是试图连接低于1024的端口,但是又没有具备权限。

2 实例:利用DatagramSocket查询端口占用情况

我们可以利用这个异常探查本地机的端口号有没有服务。见示例12-9。

【程序源代码】

1 // ==================== Program Description =====================

2 // 程序名称:示例12-9: UDPScan.java 3 // 程序目的:熟悉DatagramSocket的基本用法,查询端口的占用情况 4 //========================================================= 5 import java.net.*; 6 7 public class UDPScan 8 { 9 public static void main(String args[]) 10 { 11 for (int port=1024;port<=65535;port++) { 12 try { 13 DatagramSocket server=new DatagramSocket(port); 14 server.close(); 15 } 16 catch(SocketException e) { 17 System.out.println("there is a server in port "+port+"."); 18 } 19 } 20 } 21 }

【程序输出结果】

there is a server in port 1026. there is a server in port 1028. there is a server in port 1046. there is a server in port 1900.

Java网络编程基础(三) Datagram类使用方法(3)

时间:2010-12-15

【程序注解】

在第11~19行我们用for循环以端口号为参数实例化DatagramSocket,其中端口号从1024到65535。如果在实例过程中出错,会抛出SocketException异常。我们根据这个异常就可以判断出哪些端口被占用,哪些还是空闲的。值得一提的是,我们在实例化了DatagramSocket后,调用了close()关闭它。作为一种好的作风,应该遵循。端口号在1024以下的系统可能会用到,比如HTTP默认为80端口,FTP默认为21端口,等等,所以我们从1024端口开始探查。

套接字对象也有相应的方法,例如发送数据包的方法还有接收数据包的方法,介绍如下。

pubic void close() 当我们创建一个套接字后,用该方法关闭套接字。

public int getLocalPort() 返回本地套接字的正在监听的端口号。

public void receive(DatagramPacket p) 从网络上接收数据包并将其存储在DatagramPacket对象p中。p中的数据缓冲区必须足够大,receive()把尽可能多的数据存放在p中,如果装不下,就把其余的部分丢弃。接收数据出错时会抛出IOException异常。

public Void Send(DatagramPacket p) 发送数据包,出错时会发生IOException异常。

下面,我们详细解释在Java中实现客户端与服务器之间数据报通信的方法。

应用程序的工作流程如下:

(1)首先要建立数据报通信的Socket,我们可以通过创建一个DatagramSocket对象实现它,在Java中DatagramSocket类有如下两种构造方法:

public DatagramSocket() 构造一个数据报socket,并使其与本地主机任一可用的端口连接。若打不开socket则抛出SocketException异常。

public DatagramSocket(int port) 构造一个数据报socket,并使其与本地主机指

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号