网站建设合同规范,网页制作一年价格,山西网站建设哪家好,网站建设时间如何查询传输层的两个主要协议#xff1a;TCP 和 UDP
UDP和TCP特点#xff08;部分#xff09;对比#xff1a;
UDP#xff1a;无连接#xff0c; 不可靠传输#xff0c; 面向数据报#xff0c; 全双工。
TCP#xff1a;有连接#xff0c; 可靠传输#xff0c; 面向字节流…传输层的两个主要协议TCP 和 UDP
UDP和TCP特点部分对比
UDP无连接 不可靠传输 面向数据报 全双工。
TCP有连接 可靠传输 面向字节流 全双工。
UDP 和 TCP 有着两套不同的api 操作系统给程序用于网络编程的api又起了另外的名字提叫socket api。 有连接就如打电话不仅需要打电话的人来拨号也需要接电话的人来同意这个过程就是建立连接。而无连接就如发短信只需要知道对方的号码就可以直接发短信不需要对方的同意。 可靠传输与不可靠传输的可靠不是指A给B的信息能100%的到达而是指A尽可能的把信息传给B并且在传输过程中A能感觉到是否传输成功而TCP能感觉的到UDP不行虽然TCP是可靠传输但这也因此导致传输效率降低了而UDP的传输效率更高。可靠传输与不可靠传输并不是判断网络安全的标准之一因此不能说TCP一定比UDP更安全。 TCP和文件操作类似都是流式的如水一样可以一次取几十毫升也可分几十次取一毫升凭自己的想法决定TCP传递消息也是如此因此TCP是面向字节流而UDP则不同它是面向数据报的它的读写的基本单位是一个UDP数据报因此它只能一次传输一个UDP数据报而不能一次传输多个数据报或者半个数据报之类的。 全双工指的是一个通道可以双向通信就如在同一个通道里A给B发信息时B也能给A发信息同时还有半双工它指的是一个通道只能单向通信。
UDP的socket api
两个核心类
1DatagramSocket
是一个Socket对象操作系统使用文件的概率来管理一些软硬件资源同样的操作系统也使用文件的方式来表示网卡的表示网卡的这类文件称为Socket文件JAVA中的Socket对象就对应这系统里的Socket文件最终还是得落在网卡上。因此要进行网络对象就必须得有Socket对象然后通过网卡进行网络通信。
DatagramSocket类有两个构造方法一个带端口号的在服务器这边使用端口号手动指定一个不带端口号在客户端使用系统自动分配为什么这么设置呢如开餐厅每次客人来吃时只需要找到餐厅位置但餐厅所处位置这有许多餐厅要想与其他餐厅区分开来就需要有一个与其他餐厅不同的名字而这个名字就相当于服务器端口号倘若这个名字会随着时间改变那么如果有回头客时就会找不到原来的餐厅因为餐厅名发生改变因此服务器的端口号是不能随意改变的而顾客来餐厅吃时也不是每次都在一个地方而是哪有位置去哪这个就是有系统自动分配的端口号倘若手动指定位置有可能该端口号已被占用就无法进行交互因此由系统自动分配是比较适合所以客户端的DatagramSocket类不带端口的。 除此之外还提供了其他的方法 void receive(DatagramPacket p) 从此套接字接收数据报如果没有接收到数据报该方法会阻 塞等待 void send(DatagramPacket p)从此套接字发送数据报包不会阻塞等待直接发送 void close() 关闭此数据报套接字 2) DatagramPacket
表示了一个UDP数据报代表了系统中设定的UDP数据报的二进制结构。同样也有两个构造方法 DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket 以用来接收数据报接收的数据保存在 字节数组第一个参数 buf 中接收指定长度第二个参数 length DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 构造一个 DatagramPacket 以用来发送数据报发送的数据为字节 数组第一个参数 buf 中从 0 到指定长度第二个参数 length 。 address 指定目的主机的 IP 和端口号 除此之外还有这其他方法 TCP的socket api
两个核心类
1ServerSocket
给服务器使用的Socket ServerSocket中会有一个“管理连接”的队列当客户端和服务器尝试建立连接的时候服务器就会和客户端进行一系列的数据交互这个过程就称为握手这个过程完了后连接就建立好了这个时候管理连接的队列里就会有这个连接元素每有一个客户端与服务器建立连接就会往这个队列添加一个元素。
2Socket
服务器和客户端都要使用。 InetAddress getInetAddress() 返回套接字所连接的地址 InputStream getInputStream() 返回此套接字的输入流 OutputStream getOutputStream() 返回此套接字的输出流