Socket

  1. ServerSocket  服务端,可通过accept方法监听请求,监听到请求后返回Socket
    1. package com.sycamore.demo2.controller.socket;
      
      import java.io.BufferedReader;
      import java.io.InputStreamReader;
      import java.io.PrintWriter;
      import java.net.ServerSocket;
      import java.net.Socket;
      
      /**
       * 1.创建ServerSocket
       * 2.调用accept 等待请求
       * 3.收到请求后,用返回的Socket创建Reader和Writer来接收和发送数据
       *    Reader接收到数据后保存到line,然后打印到控制台
       *    再将数据发送到client,告诉client接收到的是什么数据
       */
      public class Server {
      
          public static void main(String arg[]){
      
              try {
                  //1.创建一个ServerSocket监听8080端口
                  ServerSocket server = new ServerSocket(8080);
                  //2.accept方法进行监听,程序停下来等待连接请求,接收到请求后返回Socket
                  Socket socket = server.accept();
                  //3.使用socket进行通信,创建BufferedReader读取数据
                  BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                  String line  = is.readLine();
      
                  System.out.println("从客户端接收的数据:"+line);
      
                  //创建PrintWriter,用于发送数据
                  PrintWriter pw = new PrintWriter(socket.getOutputStream());
                  pw.println("接收数据:"+line);
                  pw.flush();
      
                  //关闭资源
                  pw.close();
                  is.close();
                  socket.close();
                  server.close();
      
              }catch (Exception e){
                  e.printStackTrace();
              }
          }
      }
  2. Socket  用于具体完成数据传输,客户端直接使用Socket发起请求并传输数据
package com.sycamore.demo2.controller.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * 启动后自动将msg发送给服务端,然后再接收服务端返回的数据并打印到控制台
 */
public class Client {
    public static void main(String arg[]){

        String msg = "客户端数据";

        try {
            //创建Socket。连接本机8080端口
            Socket socket = new Socket("127.0.0.1",8080);
            //使用Socket创建PrintWriter和BufferedReader进行读写数据
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //发送数据
            pw.println(msg);
            pw.flush();
            //接收数据
            String line = is.readLine();
            System.out.println("从服务端接收的数据:"+line);

            //关闭资源
            pw.close();
            is.close();
            socket.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
原文地址:https://www.cnblogs.com/sycamore0802/p/11422970.html