当前位置:主页 > 网页教程 > 网络编程 > Java教程 > 内容欢迎大家投稿

Java网络编程基础(二) Socket类的使用方法

时间:2009-10-11 20:44来源:未知 作者:大宝库 点击:读取中
阅读工具:字体:

当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个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。(责任编辑:大宝库)



------分隔线----------------------------
推荐内容
  • Java新手入门很重要的几个基本概念

    final类:为防止他人从你的类上派生新类,此类是不可扩展的。 动态调用比静态调用花费...

  • Java主要特性

    1、Java语言是简单的 。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容...

  • Java语言特点

    Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植...

  • 什么是Java?

    Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言...

  • 编写高效Java代码 java.lang.String类和java.

    养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.uti...

赞助商链接
赞助商链接