首先是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却又那么简单。
这是为什么?
我觉得可能是协议问题,看来最近得补补基础了。
TCP建立数据交互需要经过三次握手,这样就能包装交互的数据是可靠的安全的。而UDP建立的数据交互却是不需要和TCP那样要在客户端和服务器端之间简历数据交互,而是服务器直接把数据分成很多很多小的数据包,丢给客户端,这样的话,数据是不可靠不安全的,但是数据发送的快。而使用UDP传输的数据比如视频音频数据,这些数据大部分是不需要太高的安全性和可靠性,却需要速度,所以一般就会用UDP传输。
因为TCP是基于流,而UDP是基于报文啊。
一句话解释,TCP是要保证数据的正确性,而UDP是不保证数据的正确到达的,包丢了就丢了,适用于突发性场景,不适合于要求数据准确性的场景
UDP的简洁是牺牲了准确以换取高效