客户机/服务器 编写服务器、客户机通信程序的应用实例电肱知识与技术 网络上的计算机之间进行通信,依靠于网络通信协议TCP/ IPO利用TCP/IP,在客户机和服务器之间建立艹ket连接是网络通信的一种模式。这种模式首先要在客户机和服务器分别创建艹ket(相当于打开的文件号),以建立一个可靠的socket连接,然后双方再在这个连接上相互交换数据。具体模式是客户机发出请求,服务器监听来自客户机的请求,一旦收到请求,立即返回所请求的数据给客户机,从而完成一次会话过程。客户机/服务器主要用于基于字节流的数据传输,它具有这样的特点:通信可靠,对数据有校验和重发的机制,可实现无差错、 无重复的数据顺序传输。 Java作为一门面向Internet的编程语言,为客户机和服务器实现以上通信提供了极其方便的编程机制。以下就Java的这一功能作一探讨。 、编写月艮务器程婷, 服务器程序的功能是监听某个端口,等待客户机连接到该端口,连接成功后,为客户机提供服务。其编程步骤如下: (1)用ServerSocket类建立一个服务器艹ket,监听某个端口。语句如下: ServerSocket serversocket = new ServerSocket(7600); 功能:建立一个服务器socket,监听端口7胼 (2)利用(1)的艹~℃ket对象和ServerSocket类的accept()方法,进人等待客户请求连接的状态。语句如下: S»cket client socket = serversock- 1年第9期 et.accept(); 功能:等待客户连接到端口7)。一旦服务器收到客户发来的连接请求,accept()方法便返回socket类对象client socket,得到与本服务器连接的客户机IP地址,从而建立一个子艹ket信道,以后服务器和客户机之间的数据通信将通过这个信道来完成。 (3)创建基于艹ket的数据输人流示和打印输出流outs,实现对子socket信道的输人输出流进行初始化。代码如下: DatalnputStæam ins = new DatalnputStream(client socket.getlnput- Stream()); PrintStream outs = new PrintStream (client socket.getOutputStream()); 功能:服务器向输出流outs发送的所有数据都将成为客户机的输人数据,而客户机的输出都将送人服务器的输人流ins中。注意:这里应该采用Datalnput- Stream类和htStream类,而不能采用InputStream类和OutputStream类。原因是服务器与客户机对话时需采用readline()和printin()方法来实现 与客户机交换数据,readLine()只作用于Datalnputstream类而不是11b putstream类,printin()作用于 PrintStream类而不是OutputStream类。 (4)与客户机会话。利用readLine() 方法从数据输人流ins中读取客户机发来的信息,显示在屏幕上;然后从键盘输人回答的信息,用println()方法将它送到打印输出流outs中,使信息 编指 程导 电脑知识与技术 1屮刃年第9期 通信的妇旧编程 0广西南宁 徐辉 喻光继 传送到客户机;最后刷空输出流outs。代码如下: outs.flush(); //读取服务器信息 DatalnputStmam in = new DatalnputStream(