1、常用的网络协议Tcp/ip协议簇

TCP协议

1、常见的模式

B/S模式 浏览器/服务器模式
C/S模式 客户端/服务器模式

2、TCP网络连接时的三次握手

image.png

  • 客户端申请连接服务器
  • 服务器同意客户端连接
  • 客户端和服务器建立连接

    3、断开时的四次挥手

    image.png

  • 客户端向服务器发送断开连接请求

  • 服务器收到后回应客户端
  • 服务器再向客户端发送断开请求
  • 客户端收到请求后断开连接

    4、Java实现TCP连接上传文件

    1. /*
    2. 客户端
    3. */
    4. public class tcpsent(){
    5. public static void main(String[] args){
    6. try {
    7. InetAddress ip = InetAddress.getByName("localhost");
    8. int port = 9999;
    9. Socket s= new Socket(ip, port);
    10. OutputStream os =s.getOutputStream();
    11. byte[] buffer =new byte[1024];
    12. int len;
    13. FileInputStream filein =new FileInputStream(new File("img\\mayi.jpg"));
    14. while((len=filein.read(buffer))!=-1) {
    15. os.write(buffer,0,buffer.length);
    16. }
    17. filein.close();
    18. os.close();
    19. s.close();
    20. } catch (Exception e) {
    21. // TODO Auto-generated catch block
    22. e.printStackTrace();
    23. };
    24. }
    25. }

    ```java //服务端 public class tcpreceive {

    public static void main(String[] args) {

    1. try {
    2. ServerSocket s = new ServerSocket(9999);
    3. Socket socket = s.accept();
    4. InputStream os = socket.getInputStream();
    5. FileOutputStream fileout = new FileOutputStream(new File("C:\\Users\\TR\\Pictures\\Camera Roll\\mayi.jpg"));
    6. byte[] buffer = new byte[1024];
    7. int len;
    8. while((len=os.read(buffer))!=-1) {
    9. fileout.write(buffer,0,len);
    10. }
    11. System.out.println("ok");
    12. fileout.close();
    13. os.close();
    14. s.close();
    15. } catch (Exception e) {
    16. // TODO Auto-generated catch block
    17. e.printStackTrace();
    18. }

    } }

  1. <a name="JurEj"></a>
  2. #### 5、java实现tcp通信的几个类
  3. ```java
  4. //服务器
  5. ServerSocket(int port);//服务器对象
  6. Socket ServerSocket.accept();阻塞等待客户端连接请求,获取一个Socket对象
  7. //客户端
  8. Socket(ip,port);//客户端对象
  9. Socket.getInputStream //获取输入流,一般用于服务器接收客户端传来的数据流
  10. Socket.getOutputStream //获取输出流,一般用于客户端向服务器发送数据流
  11. //文件上传涉及的io对象
  12. FileOutputStream(new File(path)) //文件输出流,用于将文件写入磁盘
  13. FileInputStream(new File(path)) //文件输入流,用于读入指定路径的文件
  14. //通用方法
  15. close() //关闭流(连接)

UDP协议

1、UDP实现数据包发送到指定端口

  1. //发送端
  2. public static void main(String[] args) {
  3. try {
  4. BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in));
  5. String data = bufferedreader.readLine();
  6. System.out.println(data);
  7. byte[] buffer = data.getBytes();
  8. DatagramPacket p =new DatagramPacket(buffer,0,buffer.length,InetAddress.getByName("localhost"),6666);
  9. DatagramSocket s =new DatagramSocket(9999);
  10. s.send(p);
  11. s.close();
  12. } catch (Exception e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }
  16. }
  1. //接收端
  2. public static void main(String[] args) {
  3. //6666端口
  4. try {
  5. DatagramSocket s =new DatagramSocket(6666);
  6. byte[] buf =new byte[1024];
  7. DatagramPacket packet = new DatagramPacket(buf,0,buf.length);
  8. s.receive(packet);
  9. String msg =new String(packet.getData(),0,packet.getLength());
  10. System.out.println(msg);
  11. s.close();
  12. } catch (Exception e) {
  13. // TODO Auto-generated catch block
  14. e.printStackTrace();
  15. }
  16. }

2、java实现udp通信的几个类

  1. //数据发射台
  2. DatagramSocket(port) //用来接收和发送数据包的‘发射台’,端口号为port
  3. .receive(DatagramPacket) //用来将接收包裹
  4. .sent(DatagramPacket) //用来发送包裹
  5. .close() //关闭连接
  6. //数据包裹
  7. DatagramPacket(buf,0,buf.length,ip,port) //用来传输数据的包裹,可以被DatagramSocket对象发送到目标地址端口
  8. .getData() //获取包裹里传递的数据
  9. //除此之外,还可以获取发送端的端口号和ip