快速业务通道

Java网络编程从入门到精通(25):创建ServerSocket对象 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

Java网络编程从入门到精通(25):创建ServerSocket对象

时间:2011-01-12

ServerSocket类的构造方法有四种重载形式,它们的定义如下:

public ServerSocket() throws IOException public ServerSocket(int port) throws IOException public ServerSocket(int port, int backlog) throws IOException public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException

在上面的构造方法中涉及到了三个参数:port、backlog和bindAddr。其中port是ServerSocket对象要绑定的端口,backlog是请求队列的长度,bindAddr是ServerSocket对象要绑定的IP地址。

一、通过构造方法绑定端口

通过构造方法绑定端口是创建ServerSocket对象最常用的方式。可以通过如下的构造方法来绑定端口:

public ServerSocket(int port) throws IOException

如果port参数所指定的端口已经被绑定,构造方法就会抛出IOException异常。但实际上抛出的异常是BindException。从图 4.2的异常类继承关系图可以看出,所有和网络有关的异常都是IOException类的子类。因此,为了ServerSocket构造方法还可以抛出其他的异常,就使用了IOException。

如果port的值为0,系统就会随机选取一个端口号。但随机选取的端口意义不大,因为客户端在连接服务器时需要明确知道服务端程序的端口号。可以通过ServerSocket的toString方法输出和ServerSocket对象相关的信息。下面的代码输入了和ServerSocket对象相关的信息。

ServerSocket serverSocket = new ServerSocket(1320); System.out.println(serverSocket);

运行结果:

ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=1320]

上面的输出结果中的addr是服务端绑定的IP地址,如果未绑定IP地址,这个值是0.0.0.0,在这种情况下,ServerSocket对象将监听服务端所有网络接口的所有IP地址。port永远是0。localport是ServerSocket绑定的端口,如果port值为0(不是输出结果的port,是ServerSocket构造方法的参数port),localport是一个随机选取的端口号。

在操作系统中规定1 ~ 1023为系统使用的端口号。端口号的最小值是1,最大值是65535。在Windows中用户编写的程序可以绑定端口号小于1024的端口,但在 Linux/Unix下必须使用root登录才可以绑定小于1024的端口。在前面的文章中曾使用Socket类来判断本机打开了哪些端口,其实使用 ServerSocket类也可以达到同样的目的。基本原理是用ServerSocket来绑定本机的端口,如果绑定某个端口时抛出 BindException异常,就说明这个端口已经打开,反之则这个端口未打开。

package server; import java.net.*; public class ScanPort {      public static void main(String[] args)      {          if (args.length == 0)              return;          int minPort = 0, maxPort = 0;          String ports[] = args[0].split("[-]");          minPort = Integer.parseInt(ports[0]);          maxPort = (ports.length > 1) ? Integer.parseInt(ports[1]) : minPort;          for (int port = minPort; port <= maxPort; port++)              try              {                  ServerSocket serverSocket = new ServerSocket(port);                  serverSocket.close();              }              catch (Exception e)              {              

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号