中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 基础 > Java语言基础
Java网络编程基础 Socket类的使用方法
作者:dxaw 时间:2007-06-14 20:59 出处:ccidnet.com 责编:月夜寒箫
              摘要:Java网络编程基础 Socket类的使用方法

当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个socket对象,Socket类有几个构造函数。

两个常用的构造函数是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),两个构造函数都创建了一个基于Socket的连接服务器端流套接字的流套接字。对于第一个InetAddress子类对象通过addr参数获得服务器主机的IP地址,对于第二个函数host参数包被分配到InetAddress对象中,如果没有IP地址与host参数相一致,那么将抛出UnknownHostException异常对象。两个函数都通过参数port获得服务器的端口号。假设已经建立连接了,网络API将在客户端基于Socket的流套接字中捆绑客户程序的IP地址和任意一个端口号,否则两个函数都会抛出一个IOException对象。

如果创建了一个Socket对象,那么它可能通过调用Socket的 getInputStream()方法从服务程序获得输入流读传送来的信息,也可能通过调用Socket的 getOutputStream()方法获得输出流来发送消息。在读写活动完成之后,客户程序调用close()方法关闭流和流套接字,下面的代码创建了一个服务程序主机地址为198.163.227.6,端口号为13的Socket对象,然后从这个新创建的Socket对象中读取输入流,然后再关闭流和Socket对象。

 

Socket s = new Socket ("198.163.227.6", 13);
            InputStream is = s.getInputStream ();
            // Read from the stream.
            is.close ();
            s.close ();

接下面我们将示范一个流套接字的客户程序,这个程序将创建一个Socket对象,Socket将访问运行在指定主机端口10000上的服务程序,如果访问成功客户程序将给服务程序发送一系列命令并打印服务程序的响应。List2使我们创建的程序SSClient的源代码:

Listing 2: SSClient.java

 

// SSClient.java
            import java.io.*;
            import java.net.*;
            class SSClient
            {
             public static void main (String [] args)
             {
              String host = "localhost";
              // If user specifies a command-line argument, that argument
              // redivsents the host name.
              if (args.length == 1)
               host = args [0];
              BufferedReader br = null;
              PrintWriter pw = null;
              Socket s = null;
              try
              {
               // Create a socket that attempts to connect to the server
               // program on the host at port 10000.
               s = new Socket (host, 10000);
               // Create an input stream reader that chains to the socket's
               // byte-oriented input stream. The input stream reader
               // converts bytes read from the socket to characters. The
               // conversion is based on the platform's default character
               // set.
               InputStreamReader isr;
               isr = new InputStreamReader (s.getInputStream ());
               // Create a buffered reader that chains to the input stream
               // reader. The buffered reader supplies a convenient method
               // for reading entire lines of text.
               br = new BufferedReader (isr);
               // Create a print writer that chains to the socket's byte-
               // oriented output stream. The print writer creates an
               // intermediate output stream writer that converts
               // characters sent to the socket to bytes. The conversion
               // is based on the platform's default character set.
               pw = new PrintWriter (s.getOutputStream (), true);
               // Send the DATE command to the server.
               pw.println ("DATE");
               // Obtain and print the current date/time.
               System.out.println (br.readLine ());
               // Send the PAUSE command to the server. This allows several
               // clients to start and verifies that the server is spawning
               // multiple threads.
               pw.println ("PAUSE");
              // Send the DOW command to the server.
               pw.println ("DOW");
               // Obtain and print the current day of week.
               System.out.println (br.readLine ());
               // Send the DOM command to the server.
             
               pw.println ("DOM");
               // Obtain and print the current day of month.
               System.out.println (br.readLine ());
               // Send the DOY command to the server.
               pw.println ("DOY");
               // Obtain and print the current day of year.
               System.out.println (br.readLine ());
              }
              catch (IOException e)
              {
               System.out.println (e.toString ());
              }
              finally
              {
               try
               {
                if (br != null)
                 br.close ();
                if (pw != null)
                 pw.close ();
                if (s != null)
                 s.close ();
               }
               catch (IOException e)
               {
                }
               }
             }
            }

运行这段程序将会得到下面的结果:

Tue Jan 29 18:11:51 CST 2002

TUESDAY

29

29

SSClient创建了一个Socket对象与运行在主机端口10000的服务程序联系,主机的IP地址由host变量确定。SSClient将获得Socket的输入输出流,围绕BufferedReader的输入流和PrintWriter的输出流对字符串进行读写操作就变得非常容易,SSClient个服务程序发出各种date/time命令并得到响应,每个响应均被打印,一旦最后一个响应被打印,将执行Try/Catch/Finally结构的Finally子串,Finally子串将在关闭Socket之前关闭BufferedReader 和 PrintWriter。

在SSClient源代码编译完成后,可以输入java SSClient 来执行这段程序,如果有合适的程序运行在不同的主机上,采用主机名/IP地址为参数的输入方式,比如www.sina.com.cn是运行服务器程序的主机,那么输入方式就是java SSClient www.sina.com.cn。

技巧

Socket类包含了许多有用的方法。比如getLocalAddress()将返回一个包含客户程序IP地址的InetAddress子类对象的引用;getLocalPort()将返回客户程序的端口号;getInetAddress()将返回一个包含服务器IP地址的InetAddress子类对象的引用;getPort()将返回服务程序的端口号。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有