1.概述

  1. ip+端口号

Java中以InetAddress代表
实例化:getByName()
getLocalHostAddress()

两常用方法:getHostName()
getHostAddress()

端口号:0-1023公认
1024-49151注册端口
49151-65535随机端口
端口加ip组合成一个套接字:Socket

  1. TCP/IP协议

TCP三次握手
0B587190-1F17-4EC1-B59E-1104ABDEEC32.jpeg
可靠连接
关闭连接,四次挥手
44BF5B0E-7B4E-4005-9667-B9CABFE0FCB8.jpeg
UDP不需建立连接,实时性好

2.TCP编程

  1. 772C900E-D7AA-4EA9-9C31-7029DF8FA312.jpeg

A367780B-618E-4821-BE9A-A2B01960A065.jpeg
734EC054-142A-4D0C-BC7F-6F5E742FB11F.jpeg

  1. 服务端客户端互传文件: ```java import org.junit.jupiter.api.Test;

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

/**

  • @author Created by MrNnobody
  • @date 2021/5/31 20:41
  • Welcome to browse and correct */ public class TCPTest {

    @Test public void client() throws IOException {

    1. Socket socket = new Socket("127.0.0.1",8090);
    2. OutputStream os = socket.getOutputStream();
    3. FileInputStream fis = new FileInputStream(new File("你很棒.jpg"));
    4. byte[] buffer = new byte[1024];
    5. int len;
    6. while((len = fis.read(buffer)) != -1){
    7. os.write(buffer,0,len);
    8. }
    9. //关闭数据输出,否则服务器持续等待接收
    10. socket.shutdownOutput();
    11. //接收来自服务器的数据
    12. InputStream is = socket.getInputStream();
    13. ByteArrayOutputStream baos = new ByteArrayOutputStream();
    14. byte[] buffer1 = new byte[1024];
    15. int len1;
    16. while ((len1 = is.read(buffer1)) != -1) {
    17. baos.write(buffer1,0,len1);
    18. }
    19. System.out.println(baos.toString());
    20. socket.close();
    21. os.close();
    22. fis.close();

    }

    @Test public void server() throws IOException {

     ServerSocket serverSocket = new ServerSocket(8090);
     Socket socket = serverSocket.accept();
     InputStream inputStream = socket.getInputStream();
     FileOutputStream fos = new FileOutputStream("你很棒2.jpg");
     byte[] buffer = new byte[1024];
     int len;
     while ((len = inputStream.read(buffer)) != -1){
         fos.write(buffer,0,len);
     }
     System.out.println("图片传输完成");
     OutputStream os = socket.getOutputStream();
     os.write("小伙子,你很棒!".getBytes());
    
    serverSocket.close();
    socket.close();
    inputStream.close();
    fos.close();
}

}

```

UDP编程

  1. UDP通过DatagramSocket套接字发送和接收数据

UDP每个数据报(DatagramPacket)都封装了IP和端口号,因此无需建立连接

  1. image.png
  2. image.png

    URL编程

  3. image.png

  4. image.png
  5. 常用方法:

image.png

  1. image.png