java - 为什么TCP发送数据要经过字节流、打印流?而UDP发送竟然如此的简单?
巴扎黑
巴扎黑 2017-04-17 17:32:10
[Java讨论组]

首先是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却又那么简单。
这是为什么?
我觉得可能是协议问题,看来最近得补补基础了。

巴扎黑
巴扎黑

全部回复(4)
黄舟

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

PHPz

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

阿神

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

巴扎黑

一句话解释,TCP是要保证数据的正确性,而UDP是不保证数据的正确到达的,包丢了就丢了,适用于突发性场景,不适合于要求数据准确性的场景

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号