为什么TCP发送数据要经过字节流、打印流?而UDP发送竟然如此的简单?

首先是TCP的客户端的代码

        //1.创建客户端Socket,指定服务器端地址和端口

        Socket socket = new Socket("localhost",8888);

        //2.获取输出流,向服务器端发送信息

         OutputStream os = socket.getOutputStream();//字节输出流

         PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流

         pw.write("用户名:admin;密码:453");

         pw.flush();//刷新缓存,向服务器端输出

         socket.shutdownOutput();

然后是UDP的客户端的代码

    //1.定义服务器的地址、端口号、数据

    InetAddress address = InetAddress.getByName("localhost");

    int port=8000;

    byte[] data = "用户名:admin;密码:123".getBytes();

    //2.创建数据报,包含发送的数据信息

    DatagramPacket packet=new DatagramPacket(data,data.length,address,port);

    //3.创建DatagramSocket对象

    DatagramSocket socket =new DatagramSocket();

    //4.向服务器端发送数据报

    socket.send(packet);

这里的客户端向本地服务器发送一些数据。令我无法理解的是为什么TCP如此复杂?获取输出流,包装打印流,还要刷新一次缓存。相比之下UDP却又那么简单。

这是为什么?

我觉得可能是协议问题,看来最近得补补基础了。


喵喵时光机
浏览 946回答 5
5回答

潇潇雨雨

因为TCP是基于流,而UDP是基于报文啊。

人到中年有点甜

TCP建立数据交互需要经过三次握手,这样就能包装交互的数据是可靠的安全的。而UDP建立的数据交互却是不需要和TCP那样要在客户端和服务器端之间简历数据交互,而是服务器直接把数据分成很多很多小的数据包,丢给客户端,这样的话,数据是不可靠不安全的,但是数据发送的快。而使用UDP传输的数据比如视频音频数据,这些数据大部分是不需要太高的安全性和可靠性,却需要速度,所以一般就会用UDP传输。

呼唤远方

UDP的简洁是牺牲了准确以换取高效

FFIVE

一句话解释,TCP是要保证数据的正确性,而UDP是不保证数据的正确到达的,包丢了就丢了,适用于突发性场景,不适合于要求数据准确性的场景
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java