java网络编程入门教程.doc_第1页
java网络编程入门教程.doc_第2页
java网络编程入门教程.doc_第3页
java网络编程入门教程.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在客户/服务器通讯办法中,服务器端需求创立监听特定端口的ServerSocket,ServerSocket 担任接纳客户衔接恳求。本章首要介绍ServerSocket 类的各个构造办法,以及成员办法的用法,接着介绍服务器如何用多线程来处置与多个客户的通讯使命。本章供给线程池的一种完结办法。线程池包含一个作业行列和若干作业线程。服务器程序向作业行列中参加与客户通讯的使命,作业线程不断从作业行列中取出使命并履行它。3.1 结构ServerSocketServerSocket 的结构办法有以下几种重载办法:l ServerSocket()throws IOExceptionl ServerSocket(int port) throws IOExceptionl ServerSocket(int port, int backlog) throws IOExceptionl ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException在以上结构办法中,参数port 指定服务器要绑定的端口(服务器要监听的端口),参数backlog 指定客户衔接恳求行列的长度,参数bindAddr 指定服务器要绑定的IP 地址。3.1.1 绑定端口除了第一个不带参数的结构办法以外,其他结构办法都会使服务器与特定端口绑定,该端口由参数port 指定。例如,以下代码创立了一个与80 端口绑定的服务器:ServerSocket serverSocket=new ServerSocket (80);若是运转时无法绑定到80 端口,以上代码会抛出IOException,更切当地说,是抛出BindException,它是IOException 的子类。BindException 通常是由以下缘由形成的:l 端口现已被其他服务器进程占用;l 在某些操作系统中,若是没有以超级用户的身份来运转服务器程序,那么操作系统不允许服务器绑定到11023 之间的端口。若是把参数port 设为0,表明由操作系统来为服务器分配一个恣意可用的端口。由操作系统分配的端口也称为匿名端口。关于大都服务器,会运用清晰的端口,而不会运用匿名端口,由于客户程序需求事前晓得服务器的端口,才干方便地访问服务器。在某些场合,匿名端口有着特别的用处,本章3.4 节会对此作介绍。3.1.2 设定客户衔接恳求行列的长度当服务器进程运转时,可能会一起监听到多个客户的衔接恳求。例如,每逢一个客户进程执行以下代码:Socket socket=new Socket(,80);就意味着在长途 主机的80 端口上,监听到了一个客户的衔接恳求。办理客户衔接恳求的使命是由操作系统来完结的。操作系统把这些衔接恳求存储在一个领先先出的行列中。许多操作系统限制了行列的最大长度,通常为50。当行列中的衔接恳求达到了行列的最大容量时,服务器进程地点的主时机回绝新的衔接恳求。只有当服务器进程通UnRegistered过ServerSocket 的accept()办法从行列中取出衔接恳求,使行列腾出空位时,行列才干继续参加新的衔接恳求。关于客户进程,若是它宣布的衔接恳求被参加到服务器的行列中,就意味着客户与服务器的衔接树立成功,客户进程从Socket 结构办法中正常回来。若是客户进程宣布的衔接恳求被服务器回绝,Socket 结构办法就会抛出ConnectionException。ServerSocket 结构办法的backlog 参数用来显式设置衔接恳求行列的长度,它将掩盖操作系统限制的行列的最大长度。值得注意的是,在以下几种状况中,仍然会选用操作系统限制的行列的最大长度:l backlog 参数的值大于操作系统限制的行列的最大长度;l backlog 参数的值小于或等于0;l 在ServerSocket 结构办法中没有设置backlog 参数。以下例程3-1 的Client.java 和例程3-2 的Server.java 用来演示服务器的衔接恳求行列的特性。例程3-1 Client.javaimport .*;public class Client public static void main(String args)throws Exceptionfinal int length=100;String host=localhost;int port=8000;Socket sockets=new Socketlength;for(int i=0;isocketsi=new Socket(host, port);System.out.println(第+(i+1)+次衔接成功);Thread.sleep(3000);for(int i=0;isocketsi.close(); /断开衔接例程3-2 Server.javaimport java.io.*;import .*;public class Server private int port=8000;private ServerSocket serverSocket;public Server() throws IOException serverSocket = new ServerSocket(port,3); /衔接恳求行列的长度为3System.out.println(服务器发动);UnRegisteredpublic void service() while (true) Socket socket=null;try socket = serverSocket.accept(); /从衔接恳求行列中取出一个衔接System.out.println(New connection accepted +socket.getInetAddress() + : +socket.getPort();catch (IOException e) e.printStackTrace();finally tryif(socket!=null)socket.close();catch (IOException e) e.printStackTrace();public static void main(String args)throws Exception Server server=new Server();Thread.sleep(60000*10); /睡觉10 分钟/server.service();Client 企图与Server 进行100 次衔接。在Server 类中,把衔接恳求行列的长度设为3。这意味着当行列中有了3 个衔接恳求时,若是Client 再恳求衔接,就会被Server 回绝。下面依照以下过程运转Server 和Client 程序。(1)把Server 类的main()办法中的“server.service();”这行程序代码注释掉。这使得服务器与8 000 端口绑定后,永久不会履行serverSocket.accept()办法。这意味着行列中的衔接请求永久不会被取出。先运转Server 程序,然后再运转Client 程序,Client 程序的打印成果如下:第1 次衔接成功第2 次衔接成功第3 次衔接成功Exception in thread main .ConnectException: Connection refused: connectat .PlainSocketImpl.socketConnect(Native Method)at .PlainSocketImpl.doConnect(Unknown Source)at .PlainSocketImpl.connectToAddress(Unknown Source)at .PlainSocketImpl.connect(Unknown Source)at .SocksSocketImpl.connect(Unknown Source)at .Socket.connect(Unknown Source)at .Socket.connect(Unknown Source)at .Socket.(Unknown Source)UnRegisteredat .Socket.(Unknown Source)at Client.main(Client.java:10)从以上打印成果能够看出,Client 与Server 在成功地树立了3 个衔接后,就无法再创立其余的衔接了,由于服务器的行列现已满了。(2)把Server 类的main()办法按如下办法修正:public static void main(String args)throws Exception Server server=new Server();/Thread.sleep(60000*10); /睡觉10 分钟server.service();作了以上修正,服务器与8 000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论