首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 认证考试 > JAVA认证 >

Java认证网络socket编程详解3--开发客户端的代码

2012-12-26 
开发客户端的代码

  开发客户端的代码

  第一,在TCPSocket项目下的tcp包下,创建一个名为ClientCode.java的文件。在其中编写引入Java包的代码,如下所示:

  package tcp;

  import java.io.BufferedReader;

  import java.io.BufferedWriter;

  import java.io.IOException;

  import java.io.InputStreamReader;

  import java.io.OutputStreamWriter;

  import java.io.PrintWriter;

  import java.net.InetAddress;

  import java.net.Socket;

  第二,编写客户端的主体代码,如下所示:

  public class ClientCode

  {

  static String clientName = "Mike";

  //端口号

  public static int portNo = 3333;

  public static void main(String[] args) throws IOException

  {

  // 设置连接地址类,连接本地

  InetAddress addr = InetAddress.getByName("localhost");

  //要对应服务器端的3333端口号

  Socket socket = new Socket(addr, portNo);

  try

  {

  System.out.println("socket = " + socket);

  // 设置IO句柄

  BufferedReader in = new BufferedReader(new InputStreamReader(socket

  .getInputStream()));

  PrintWrite out = new PrintWriter(BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

  out.println("Hello Server,I am " + clientName);

  String str = in.readLine();

  System.out.println(str);

  out.println("byebye");

  }

  finally

  {

  System.out.println("close the Client socket and the io.");

  socket.close();

  }

  }

  }

  上述客户端代码的主要业务逻辑是:

  1. 同样定义了通讯端口号,这里给出的端口号必须要和服务器端的一致。

  2. 在main函数里,根据地址信息“localhost”,创建一个InetAddress类型的对象addr。这里,因为我们把客户端和服务器端的代码都放在本机运行,所以同样可以用“127.0.0.1”字符串,来创建InetAddress对象。

  3. 根据addr和端口号信息,创建一个Socket类型对象,该对象用来同服务器端的ServerSocket类型对象交互,共同完成C/S通讯流程。

  4. 同样地创建in和out两类IO句柄,用来向服务器端发送和接收数据流。

  5. 通过out对象,向服务器端发送"Hello Server,I am …"的字符串。发送后,同样可以用in句柄,接收从服务器端的消息。

  6. 利用out对象,发送”byebye”字符串,用以告之服务器端,本次通讯结束。

  7. 在finally从句里,关闭Socket对象,断开同服务器端的连接。

  运行效果演示

  在上述两部分里,我们分别讲述了C/S通讯过程中服务器端和客户端代码的业务逻辑,下面我们将在集成开发环境里,演示这里通讯流程。

  第一步,选中ServerCode.java代码,在eclipse的“运行”菜单里,选中“运行方式”|“1 Java应用程序”的菜单,开启服务器端的程序。

  开启服务端程序后,会在eclipse环境下方的控制台里显示如下的内容:

  The Server is start: ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=3333]

  在这里,由于ServerSocket对象并没监听到客户端的请求,所以addr和后面的port值都是初始值。

  第二步,按同样的方法,打开ClientCode.java程序,启动客户端。启动以后,将在客户端的控制台里看到如下的信息:

  socket = Socket[addr=localhost/127.0.0.1,port=3333,localport=1326]

  Hello Server,I am Mike

  close the Client socket and the io.

  从中可以看到,在第一行里,显示客户端Socket对象连接的IP地址和端口号,在第二行里,可以到到客户端向服务器端发送的字符串,而在第三行里,可以看到通讯结束后,客户端关闭连接Socket和IO对象的提示语句。

  第三步,在eclipse下方的控制台里,切换到ServerCode服务端的控制台提示信息里,我们可以看到服务器端在接收到客户端连接请求后的响应信息。

  响应的信息如下所示:

  The Server is start: ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=3333]

  Accept the Client: Socket[addr=/127.0.0.1,port=1327,localport=3333]

  In Server reveived the info: Hello Server,I am Mike

  close the Server socket and the io.

  其中,第一行是启动服务器程序后显示的信息。在第二行里,显示从客户端发送的连接请求的各项参数。在第三行里,显示了从客户端发送过来的字符串。在第四行里,显示了关闭服务器端ServerSocket和IO对象的提示信息。从中我们可以看出在服务器端里accept阻塞和继续运行的这个过程。

  通过上述的操作,我们可以详细地观察到C/S通讯的全部流程,请大家务必要注意:一定要先开启服务器端的程序再开启客户端,如果这个步骤做反的话,客户端程序会应找不到服务器端而报异常。

热点排行