UDP协议与TCP协议
网络模型图
什么是Socket?
Socket就是为网络服务提供的一种机制
通讯的两端都有Socket
网络通讯其实就是Socket间的通讯
数据在两个Socket间通过IO传输
任何计算机语言通讯底层都是Socket技术,遵循一个规范:二进制+ip+端口号
Socket是可以跨语言传输的
Socket网络编程中也有服务端和客户端
TCP和UDP是Socket的两个核心
udp协议:
a、是面向无连接, 将数据及源封装在数据包中,不需要建立连接
b、每个数据包的大小在限制64k内,存不了太多东西
c、因无连接,是不可靠协议
d、不需要建立连接,速度快
TCP协议:
a、建议连接,形成传输数据的通道
b、在连接中进行大数据量传输,以字节流方式
c、 通过三次握手完成连接,是可靠协议,但是效率没有UDP高
d 、必须建立连接,效率会稍低
e、http协议底层是使用tcp连接的
//socket服务器端 class UdpServer { public static void main(String[] args) throws IOException { System.out.println("udp服务器端启动...."); //建立连接 DatagramSocket datagramSocket = new DatagramSocket(8080); //准备一个空的数据包 byte[] bytes = new byte[1024]; DatagramPacket dp = new DatagramPacket(bytes, bytes.length); //调用udp的服务接收数据,等待接受客户端发送请求, // 客户端如果一直不发送请求,那么红灯会一直亮着,阻塞状态 datagramSocket.receive(dp); System.out.println("来源:"+dp.getAddress()+",端口号:"+dp.getPort()); // 获取客户端请求内容和数据长度 String str=new String(dp.getData(),0,dp.getLength()); System.out.println("str:"+str); datagramSocket.close(); } }
public class UdpClient { public static void main(String[] args) throws IOException { System.out.println("udp客户端启动连接...."); //建立简介 DatagramSocket ds = new DatagramSocket(); //数据包的内容 String str="SOS"; byte[] bytes= str.getBytes(); DatagramPacket dp= new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"),8080); //调用udp的服务发送数据 ds.send(dp); ds.close(); } }
客户端没有发送请求过来的时候一直亮着灯。tcp也一样
http底层是tcp连接的所以当我开启udp服务器的时候打开浏览器无法访问,与tcp相反
当udp服务端关闭,开启客户端时,是不会报错的,但是tcp不一样,tcp服务端关闭时,开启客户端,会报连接超时的错误