18day

day18

TCP

客户端

  1. 连接服务器Socket

  2. 发送消息

    package com.yan.lesson02;

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.nio.charset.StandardCharsets;

    //客户端
    public class TcpClientDemo01 {
       public static void main(String[] args) {
           Socket socket =null;
           OutputStream os =null;
           try {
               //1.要知道服务器的地址 IP
               InetAddress serverIP = InetAddress.getByName("127.0.0.1");
               //2.端口号
               int port = 9999;
               //3.创建一个socket连接
               socket = new Socket(serverIP,port);
               //4.发送消息 IO流
               os = socket.getOutputStream();
               os.write("欢迎学习".getBytes());
          } catch (Exception e) {
               e.printStackTrace();
          }finally {
               if (os!=null){
                   try {
                       os.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
              }
               if (socket!=null){
                   try {
                       socket.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
              }

          }
      }
    }

服务器

  1. 建立服务端口ServerSocket

  2. 等待用户连接accept

  3. 接收用户的消息

    package com.yan.lesson02;


    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    //服务端
    public class TcpServerDemo01 {
       public static void main(String[] args) {
           ServerSocket serverSocket=null;
           Socket socket=null;
           InputStream is=null;
           ByteArrayOutputStream baos=null;
           try {
               //1.得有一个地址
               serverSocket = new ServerSocket(9999);
               while (true){
                   //2.等待客户端连接
                   socket = serverSocket.accept();
                   //3.读取客户端的消息
                   is = socket.getInputStream();
                   //管道流
                   baos = new ByteArrayOutputStream();
                   byte[] buffer = new byte[1024];
                   int len;
                   while ((len=is.read(buffer))!=-1){
                       baos.write(buffer,0,len);
                  }
                   System.out.println(baos.toString());
              }
          } catch (IOException e) {
               e.printStackTrace();
          }finally {
               //关闭资源
               if (baos!=null){
                   try {
                       baos.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
              }
               if (is!=null){
                   try {
                       is.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
              }
               if (socket!=null){
                   try {
                       socket.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
              }
               if (serverSocket!=null){
                   try {
                       serverSocket.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
              }

          }
      }
    }

    文件上传

    服务器端

    package com.yan.lesson02;

    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.nio.charset.StandardCharsets;
    import java.util.Scanner;

    public class TcpServerDemo02 {
       public static void main(String[] args) throws Exception{
           //1.创建服务
           ServerSocket serverSocket = new ServerSocket(9000);
           //2.监听客户端的连接
           Socket socket = serverSocket.accept();//阻塞式监听,会一直等待客户端连接
           //Scanner scanner = new Scanner(System.in);
           //3.获取输入流
           InputStream is = socket.getInputStream();
           //4.文件输出
           FileOutputStream fos = new FileOutputStream(new File("receive.png"));
           byte[] buffer = new byte[1024];
           int len;
           while ((len=is.read(buffer))!=-1){
               fos.write(buffer,0,len);
          }
           //通知客户端我接收完毕了
           OutputStream os = socket.getOutputStream();
           os.write("我接受到了".getBytes());
           //关闭资源
           fos.close();
           is.close();
           socket.close();
           serverSocket.close();
      }
    }

    客户端

    package com.yan.lesson02;

    import java.io.*;
    import java.net.InetAddress;
    import java.net.Socket;

    public class TcpClientDemo02 {
       public static void main(String[] args) throws Exception{
           //1.创建一个Socket连接
           Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
           //2.创建一个输出流
           OutputStream os = socket.getOutputStream();
           //3.读取文件
           FileInputStream fis = new FileInputStream(new File("dd.png"));
           //4.写出文件
           byte[] buffer = new byte[1024];
           int len;
           while ((len=fis.read(buffer))!=-1){
               os.write(buffer,0,len);
          }
           //通知服务器我已经结束了
           socket.shutdownOutput();//我已经传输完了

           //确定服务器接收完毕
           InputStream inputStream = socket.getInputStream();
           //String byte[]
           ByteArrayOutputStream baos = new ByteArrayOutputStream();
           byte[] buffer2 = new byte[1024];
           int len2;
           while ((len2=inputStream.read(buffer2))!=-1){
               baos.write(buffer2,0,len2);
          }

           System.out.println(baos.toString());
           //5.关闭资源,才能够断开连接
           baos.close();
           inputStream.close();
           fis.close();
           os.close();
           socket.close();

      }
    }

     

posted @ 2021-04-24 20:48  卧剑之鱼  阅读(226)  评论(0)    收藏  举报