JAVA网络编程之TCP传输

一、多线程网络编程(TCP协议)

1.客户端

  • 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
  • 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
  • 输入流可以读取服务端输出流写出的数据
  • 输出流可以写出数据到服务端的输入流
public static void main(String[] args) throws UnknownHostException, IOException {
   Socket socket = new Socket("127.0.0.1", 12345);
   //将字节流包装成了字符流
   BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));       
   //PrintStream中有写出换行的方法
   PrintStream ps = new PrintStream(socket.getOutputStream());                
   
   System.out.println(br.readLine());
   ps.println("你好");
   System.out.println(br.readLine());
   ps.println("大家好");
   
   socket.close();
}

 注:

  • 此处不适用BufferedWriter的原因:BufferedReader中readLine()方法以读入换行符(\r\n)为结束标志,而PrintStream中的println()方法比BufferedWriter中newLine()方法更加方便,所以此处推荐使用PrintStream。
  • PrintStream必须使用println()输出,如果使用print()方法可能导致死锁。

2.服务器 

  • 创建ServerSocket(需要指定端口号)
  • 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
  • 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
  • 输入流可以读取客户端输出流写出的数据
  • 输出流可以写出数据到客户端的输入流
public static void main(String[] args) throws IOException {
   ServerSocket server = new ServerSocket(12345);
   
   while(true) {
      final Socket socket = server.accept();                //接受客户端的请求
      new Thread() {
         public void run() {
            try {
               BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));       //将字节流包装成了字符流
               PrintStream ps = new PrintStream(socket.getOutputStream());                //PrintStream中有写出换行的方法
               
               ps.println("你好");
               System.out.println(br.readLine());
               ps.println("再见");
               System.out.println(br.readLine());
               socket.close();
            } catch (IOException e) {
               
               e.printStackTrace();
            }
         }
      }.start();
   }
}

猜你喜欢

转载自blog.csdn.net/qq_40298054/article/details/88983859