首页 > 编程语言 > 详细

Java网络编程TCP/UDP

时间:2021-06-09 09:22:05      阅读:16      评论:0      收藏:0      [点我收藏+]

通信协议

  • TCP和UDP协议是TCP/IP协议的核心。 TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

TCP

打电话的机制, 必须双方建立连接才能通信

  • 三次握手(建立连接)
    • A:你瞅啥
    • B:瞅你咋地
    • A:哎我去
  • 四次挥手(断开连接)
    • A:走了哈老铁
    • B:真要走了?老铁?
    • B:真的要走了?不再来点?
    • A:不来了,真要走了。

TCP的主要类

  1. InetAddress:不能new, 可以通过getByName方法获得实例

    InetAddress localhost = InetAddress.getByName("localhost");
    InetAddress localhost = InetAddress.getByName("127.0.0.1");
    
  2. Socket:客户端类 (InetAddress,端口号)

    Socket Socketsocket = new Socket(serverIP, 8080);
    
    // 发送消息给服务器
    os = socket.getOutputStream();
    os.write("您好,服务器".getBytes(StandardCharsets.UTF_8));
    socket.shutdownOutput();
    
    // 接受消息
    InputStream inputStream = socket.getInputStream();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] msgBuffer = new byte[1024];
    int len2;
    while ((len2 = inputStream.read(msgBuffer)) != -1) {
        baos.write(msgBuffer, 0, len2);
    }
    System.out.println(baos.toString());
    socket.shutdownInput();
    
  3. ServerSocket:服务器端类

    ServerSocket serverSocket = new ServerSocket(8080);
    
    // 监听客户端信息
    accept = serverSocket.accept();
    
    // 读取客户端端消息
    is = accept.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());
    

UDP

发短信的机制, 不需要建立连接,只管发送,不管对方是否能够接收到

UDP的主要类

  • DatagramSocket(发送的主体)

    // 随机端口
    this.mySocket = new DatagramSocket();
    // 指定端口
    this.mySocket = new DatagramSocket(8080);
    
  • DatagramPacket(发送的内容)

    // 建立一个包
    String msg = "test!";
    InetAddress inetAddress = InetAddress.getByName("localhost") ;
    int port = 9000;
    DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(StandardCharsets.UTF_8), 0, msg.getBytes(StandardCharsets.UTF_8).length, inetAddress, port);
    
  • 发送信息

    // 发送包
    datagramSocket.send(datagramPacket);
    
  • 接受信息

    // 建立一个接收的socket
    DatagramSocket datagramSocket = new DatagramSocket(9000); // 端口号要和发送内容里指定的一致
    
    // 接受消息
    byte[] bytes = new byte[1024];
    DatagramPacket dataPacket = new DatagramPacket(bytes, 0, bytes.length);
    datagramSocket.receive(dataPacket);
    
    String msg = new String (dataPacket.getData(), 0, dataPacket.getData().length, StandardCharsets.UTF_8);
    System.out.println(msg);
    

Java网络编程TCP/UDP

原文:https://www.cnblogs.com/hanchuge/p/14864904.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!