当前位置:主页   - 电脑 - 程序设计 - JAVA
Java Socket构建阻塞的TCP通信
来源:网络   作者:   更新时间:2012-06-10
收藏此页】    【字号    】    【打印】    【关闭

  1.服务器端

  1.创建ServerSocket对象,可在构造子中指定监听的端口;

private int port = 8000;
private ServerSocket serverSocket;
……
serverSocket = new ServerSocket(port);

  2.服务器端调用ServerSocket对象的accept()方法,该方法一直监听端口,等待客户的连接请求,如果接收到一个连接请求,accept()方法就会返回一个Socket对象,这个Socket对象与客户端的Socket对象将形成一条通信线路;

Socket socket = null;
socket = serverSocket.accept(); // 等待客户连接

  3.Socket类提供了getInputStream()方法和getOutputStream()方法。

  InputStream socketIn = socket.getInputStream();

  OutputStream socketOut = socket.getOutputStream();

  源代码EchoServer.java

public class EchoServer {
  private int port = 8000;
  private ServerSocket serverSocket;
  public EchoServer() throws IOException {
    serverSocket = new ServerSocket(port);
    System.out.println("Server Start");
  }
  public String echo(String msg) {
    return "echo:" + msg;
  }
  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 service() {
    while (true) {
      Socket socket = null;
      try {
       socket = serverSocket.accept(); // 等待客户连接
       System.out.println("New connection 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));
         if (msg.equals("bye")) // 如果客户发送的消息为“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();
  }
}

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明