Socket的简单实现(一)

先看一下Socket与ServerSocket的交互:

Socket的简单实现(一)_第1张图片
交互图.png
(交互图引自: http://www.cnblogs.com/rond/p/3565113.html)

简单流程:

服务器端:
1.创建ServerSocket对象,绑定监听端口

  ServerSocket serverSocket = new ServerSocket(18901);//服务端socket必须要指定端口(监听端口)

2.通过accept()方法监听客户端请求

  Socket socket = serverSocket.accept();//如果有请求过来,接受,得到客户端的socket信息

3.连接建立后,通过输出流读取客户端发送的请求信息

  InputStream inputStream = socket.getInputStream();
  byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) {
        System.out.println(new String(buffer, 0, len));
    }

4.通过输出流向客户端发送响应信息

   OutputStream outputStream = socket.getOutputStream();

5.关闭相关资源

   socket.close();
   serverSocket.close();

客户端:
1.创建Socket对象,指明需要连接的服务器的地址和端口号

  Socket socket = new Socket("111.11.11.111", 18901);//IP    端口号(1024以上)

2.连接建立后,通过输出流向服务器端发送请求信息

  OutputStream outputStream = socket.getOutputStream();//向外发
    outputStream.write("你好,我是客户端".getBytes());

    socket.shutdownOutput();//发送完毕,将socket输出流关掉

3.通过输入流获取服务器响应的信息

  InputStream inputStream1 = socket.getInputStream();//
    byte[] buffer1 = new byte[1024];
    int len = 0;
    while ((len = inputStream1.read(buffer1)) !=-1){
        System.out.println(new String(buffer1, 0, len));
    }

4.关闭相关资源

   socket.close();//Socket关掉

以下是发送端的代码:

  /*
   * 发送数据的
   */
  public class TCPClient {

public static void main(String[] args) throws IOException {
    System.out.println("客户端启动");
    Socket socket = new Socket("111.11.11.111", 18901);//IP    端口号(1024以上)
    OutputStream outputStream = socket.getOutputStream();//向外发
    outputStream.write("你好,我是客户端".getBytes());

    socket.shutdownOutput();//发送完毕,将socket输出流关掉
    /**
     * 读
     */
    InputStream inputStream1 = socket.getInputStream();//
    byte[] buffer1 = new byte[1024];
    int len = 0;
    while ((len = inputStream1.read(buffer1)) !=-1){
        System.out.println(new String(buffer1, 0, len));
    }

    socket.close();//Socket关掉

}

  }

以下是服务端的代码:

  /*
   * 服务端
   * 先启动
   */
  public class TCPServer {

public static void main(String[] args) throws IOException {
    System.out.println("服务器启动");
    ServerSocket serverSocket = new ServerSocket(18901);//服务端socket必须要指定端口(监听端口)

    Socket socket = serverSocket.accept();//如果有请求过来,接受,得到客户端的socket信息
    InputStream inputStream = socket.getInputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) {
        System.out.println(new String(buffer, 0, len));
    }
    OutputStream outputStream = socket.getOutputStream();
    outputStream.write("你好,这里是服务端".getBytes());
    socket.shutdownOutput();


    socket.close();
    serverSocket.close();


}
  }

以下是运行结果:

Socket的简单实现(一)_第2张图片
服务端.png
Socket的简单实现(一)_第3张图片
客户端.png

你可能感兴趣的:(Socket的简单实现(一))