Java Socket编程服务器端和客户端的一个简单实例

服务器端:

package com.bijian.test;

import java.io.*;
import java.net.*;

public class EchoServer {

  private int port = 8000;
  private ServerSocket serverSocket;

  public EchoServer() throws IOException {

    serverSocket = new ServerSocket(port);
    System.out.println("服务器启动");
  }

  public String echo(String msg) {
    return "echo:" + msg;
  }

  public PrintWriter getWriter(Socket socket) throws IOException {

    OutputStream socketOut = socket.getOutputStream();
    return new PrintWriter(socketOut, true);
  }

  public BufferedReader getReader(Socket socket) throws IOException {

    InputStream socketIn = socket.getInputStream();
    return new BufferedReader(new InputStreamReader(socketIn));
  }

  public void service() {

    while (true) {

      Socket socket = null;
      try {
        socket = serverSocket.accept();// 等待客户端连接
        System.out.println("New aonnection accepted" + socket.getInetAddress() + ":"
            + socket.getPort());
        BufferedReader br = getReader(socket);
        PrintWriter pw = getWriter(socket);

        String msg = null;
        while ((msg = br.readLine()) != null) {
          System.out.println(msg);
          pw.println(echo(msg));
          pw.flush();
          if (msg.equals("bye")) {
            break;
          }
        }
      } catch (IOException e) {
        e.printStackTrace();
      } finally {
        try {
          if (socket != null)
            socket.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

  public static void main(String[] args) throws IOException {
    new EchoServer().service();
  }
}

客户端:

package com.bijian.test;

import java.net.*;
import java.io.*;

public class EchoClient {

  private String host = "localhost";
  private int port = 8000;
  private Socket socket;

  public EchoClient() throws IOException {
    socket = new Socket(host, port);
  }

  private PrintWriter getWriter(Socket socket) throws IOException {
    OutputStream socketOut = socket.getOutputStream();
    return new PrintWriter(socketOut, true);
  }

  private BufferedReader getReader(Socket socket) throws IOException {
    InputStream socketIn = socket.getInputStream();
    return new BufferedReader(new InputStreamReader(socketIn));
  }

  public void talk() throws IOException {

    try {
      BufferedReader br = getReader(socket);
      PrintWriter pw = getWriter(socket);
      BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in));
      String msg = null;
      while ((msg = localReader.readLine()) != null) {
        pw.println(msg);
        pw.flush(); 
        System.out.println(br.readLine());
        if (msg.equals("bye")) {
          break;
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        socket.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  public static void main(String[] args) throws IOException {
    new EchoClient().talk();
  }
}

运行结果:

客户端:


服务端:



参考文章:http://www.cnblogs.com/mbigger/archive/2012/08/08/2628154.html

猜你喜欢

转载自bijian1013.iteye.com/blog/2307186