当前位置: 首页 > news >正文

手机端网站建设步骤全国文明城市创建标语

手机端网站建设步骤,全国文明城市创建标语,wordpress多站点好吗,php网站开发实目录 #x1f6a9;UDP和TCP之间的区别 #x1f388;TCP是有连接的 UDP是无连接的 #x1f388;TCP是可靠传输 UDP是不可靠传输 #x1f388;TCP是面向字节流 UDP是面向数据报 #x1f388;TCP和UDP是全双工 #x1f469;#x1f3fb;‍#x1f4bb;UDP的socket ap…目录 UDP和TCP之间的区别 TCP是有连接的 UDP是无连接的 TCP是可靠传输 UDP是不可靠传输 TCP是面向字节流 UDP是面向数据报 TCP和UDP是全双工 ‍UDP的socket api使用 DatagramSocket API DatagramSocket 方法 DatagramPacket API InetSocketAddress API UDP客户端/服务器 通信程序实现 服务器 接收客户端发来的请求并且解析 根据请求返回响应 创建一个DatagramPacket类 存入数据并发送给客户端 打印日志 客户端  通过网络让俩个主机之间进行通信基于这样的通信来完成一定的功能。 进行网络编程的时候需要操作系统给咱们提供一组api通过这种api才能完成编程。 api可以认为是应用层和传输层之间交互的路径。socket api就相当于插座一样通过这一套socket api可以完成不同软件之间不同操作系统之间的通信。 传输层提供的协议主要有2个TCP和UDP这俩个。TCP和UDP这俩个协议的特性工作原理) 差异很大导致使用俩种协议进行网络编程也存在一定差别系统就分别提供俩种api。 UDP和TCP之间的区别 TCP是有连接的 UDP是无连接的 TCP是有连接的UDP是无连接的。什么是有连接和无连接呢此处的连接本质上就是建立连接的双方各自保存对方的信息俩台计算机建立连接就是双方彼此保存了对方的关键信息。TCP要想通信就需要先建立连接(所谓连接就是保存对方的信息做完之后才能后续通信。如果A和B建立连接但是B拒绝了通信就无法完成了UDP想要通信就直接发送数据就行了不需要建立连接也就是不需要保存对方的信息。虽然UDP本身是不保存的但是你调用的UDP的socket api的时候要把对方的位置啥的给传过去。后面再 实现TCP就需要在类里初始化IP地址和端口号传入构造方法中而UDP不用。 TCP是可靠传输 UDP是不可靠传输 TCP里面内置了可靠传输的机制UDP没有。网络上进行通信A发送给B消息这个消息不可能做到100%发送到的所以什么是可靠传输呢可靠传输就是A发送给B发信息消息是不是到达B这一方A自己能感知到A心里有数进一步的就可以再发送失败的时候采取一定的措施尝试重传之类的。而从不可靠传输到可靠传输都是需要付出一些代价的比如可靠传输的机制比较复杂传输效率低。 就像一个老中医生有资历给病人看病看了一下就知道他有什么毛病只是不说出来老中医心里有数然后就去拿药配方进行医治。 TCP是面向字节流 UDP是面向数据报 字节流和文件操作里面的字节流是一个意思所以我们再实现TCP客户端和服务器之间的通信的时候就需要用到文件操作里面字节输入流和输出流。 TCP是和文件操作一样以字节为单位来进行传输UDP是按照数据报为单位来进行传输的。UDP数据报是有严格的格式的。 TCP和UDP是全双工 一个信道允许双向通信就是全双工一个信道只能单向通信就是半双工 代码中使用一个Socket对象就可以发送数据也能接收数据。 半双工——单向通信 一个管子只能一边吹气。 但是B 不能给A吹气 这就是所谓的单向通信——半双工 全双工——双向通信 一根网线电流不是只能从一边流向另一边咋能双向通信呢 就比如一个道路我们中间划一道黄线双向行驶 ‍UDP的socket api使用 DatagramSocket API DatagramSocket 是 UDP Socket 用于发送和接收 UDP 数据报。 DatagramSocket 构造方法 方法签名方法说明DatagramSocket()创建一个UDP数据报套接字的Socket,绑定到本机任意一个随机端口(一般用于客户端DatagramSocket(int port)创建一个UDP数据报套接字的Socket绑定到本机指定的端口一般用于服务器 为什么服务器要指定端口呢而客户端不同 因为服务器是程序员决定的知道哪些端口是可以用的这是可控的客户端是不可控的每个用户电脑程序不一样占用的端口也不一样如果手动指定端口会产生冲突。所以 客户端交给系统自动分配的。 socket其实也是操作系统一个概念本质上是一种特殊的文件Socket就属于是把网卡这个设备抽象成了文件了往socket文件中写数据就相当于通过网卡发送数据从socket文件读数据就相当于通过网卡接收数据。这就是网络通信和文件操作统一了。 DatagramSocket 方法 方法签名方法说明void receive(DatagramPacket p)从此套接字接收数据报如果没有接收到数据报该方法就会阻塞等待void send(DatagramPacket p)从此套接字发送数据报包(不会阻塞等待直接发送void close()关闭此数据报套接字 receive()和send()方法里面的参数其实是输出型参数数据报是空的然后进行填充并返回。  DatagramPacket API DatagramPacket 是 UDP Socket 发送和接收的数据报。 DatagramPacket 构造方法 方法签名方法说明DatagramPacket(byte[] buf,int length)构造一个DatagramPacket以用来接收数据报接收的数据保存在字节数组(第一个参数buf)中接收指定长度第二个参数length)DatagramPacket(byte[] buf,int offset,int length,SocketAddress address)构造一个DatagramPacket以用来发送数据报发送的数据为字节数组第一个参数buf)中从0到指定长度第二个参数length。address指定目的主机的IP和端口号 DatagramPacket 方法 方法签名方法说明InetAddress. getAddress()从接收的数据报中获取发送端主机IP地址或从发送的数据报中获取接收端主机IP地址int getPort()从接收的数据报中获取发送端主机的端口号;或从发送的数据报中获取接收端主机端口号 byte[] getData() 获取数据报中的数据 构造UDP发送的数据报时需要传入socketAddress该对象可以使用InetSocketAddress来创建。 InetSocketAddress API InetSocketAddress SocketAddress 的子类 构造方法 方法签名方法说明InetSocketAddress(InetAddress addr, int port)创建一个Socket地址包含IP地址和端口号 UDP客户端/服务器 通信程序实现 这个程序是没有什么业务逻辑只是单纯的调用socket api .让客户端给服务器发送一个请求请求就是一个从控制台输入的字符串服务器收到字符串之后也就会把这个字符串原封不动的返回客户端客户端再显出来。——回显服务器echo server) 服务器 接收客户端发来的请求并且解析 public UdpEchoServer(int port) throws SocketException {socketnew DatagramSocket(port);//服务器需要指定端口} 服务器和客户端都需要创建Socket对象。 服务器的socket一般要显示的指定一个端口号客户端的socket一般不能显式指定不显示指定此时系统会自动分配一个随机的端口 //接收请求之前我们需要开辟一个空间存储要求DatagramPacket requestSocketnew DatagramPacket(new byte[4096],4096);socket.receive(requestSocket); DatagramPacket这个对象用来承载从网卡这边读到的数据收到数据的时候需要搞一个内存空间来保存这个数据DatagramPacket内部不能自行分配内存空间因此就需要程序员手动把孔吉纳创建好交给DatagramPacket进行处理。 服务器一旦启动就会立即执行到这里的receive方法此时客户端的请求还没来这种情况也是没有关系的receive就会直接阻塞就会一直阻塞到真正客户端把请求发过来为止。 //由于接收到的请求是二进制我们需要转换成字符串String requestnew String(requestSocket.getData(),0,requestSocket.getLength()); 这个getLength 得到的结果是否是上述的4096这个结果是收到的数据的真实长度取决于发送方这一次到底发送了多少数据。取这个区间内的字节构成一个Stirng。 根据请求返回响应 //2.根据请求返回响应String responsenew String(request); public String process(String request){return request;} 这个步骤是一个服务器程序最核心的步骤咱们当时是echo server不涉及这些流程也不必考虑响应怎么计算只要请求过来就把请求当作响应。 创建一个DatagramPacket类 存入数据并发送给客户端 UDP是无连接的UDP自身不会保存数据要发给谁就需要每次发送的时候重新指定数据要发到哪里去。上述创建数据报是存入发来的请求。 //3.创建一个DatagramPacket类 存入数据并发送给客户端//requestSocket.getSocketAddress() requestSocket里面包含客户端的IP地址和端口号DatagramPacket responsePacketnew DatagramPacket(response.getBytes(),0,response.getBytes().length,requestSocket.getSocketAddress());socket.send(responsePacket); 构造这个数据报需要指定数据内容也指定一下数据报要发给谁。再网络传输的时候肯定是要使用字节的。 可以让response.getBytes().length改成response.length()嘛不行的本质上也是和字符集有关系的。如果你这个字符串里内容都是英文字符此时字节和字符个数是一样的如果包含中文就不一样的。 requestSocket.getSocketAddress()指定一下请求中的地址数据从哪里来我们就要到哪里去包含IP地址和端口号 打印日志 //打印一个日志 打印 客户端IP 客户端端口 客户端内容 服务器内容System.out.printf([%s:%d] %s%s,responsePacket.getAddress(),responsePacket.getPort(),request,response); package UDP;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;public class UdpEchoServer {DatagramSocket socketnull;public UdpEchoServer(int port) throws SocketException {socketnew DatagramSocket(port);//服务器需要指定端口}public void start() throws IOException {System.out.println(服务器开始启动-);while (true){//1.接收客户端发来的请求并且解析//接收请求之前我们需要开辟一个空间存储要求DatagramPacket requestSocketnew DatagramPacket(new byte[4096],4096);//然后接收请求如果客户端还没发来请求就阻塞等待socket.receive(requestSocket);//由于接收到的请求是二进制我们需要转换成字符串String requestnew String(requestSocket.getData(),0,requestSocket.getLength());//2.根据请求返回响应String responsenew String(request);//3.创建一个DatagramPacket类 存入数据并发送给客户端//requestSocket.getSocketAddress() requestSocket里面包含客户端的IP地址和端口号DatagramPacket responsePacketnew DatagramPacket(response.getBytes(),0,response.getBytes().length,requestSocket.getSocketAddress());socket.send(responsePacket);//打印一个日志 打印 客户端IP 客户端端口 客户端内容 服务器内容System.out.printf([IP地址:%s 端口号:%d] request%s response%s,responsePacket.getAddress(),responsePacket.getPort(),request,response);}}public String process(String request){return request;}public static void main(String[] args) throws IOException {UdpEchoServer udpEchoServernew UdpEchoServer(9090);udpEchoServer.start();} }客户端 客户端做的事情就是 发出请求尝试得到服务器返回的响应 1.将输入的字符串转换成请求并发送给服务器2.发出请求之后我们就要创建一个数据报存储由服务器返回的请求尝试返回请求3.将响应转换成字符串并响应出来 package UDP;import java.io.IOException; import java.net.*; import java.util.Scanner;public class UDPClient {DatagramSocket socketnull;String serverIp;int serverPort0;public UDPClient(String serverIp, int serverPort) throws SocketException {socket new DatagramSocket();this.serverIp serverIp;this.serverPort serverPort;}public void start() throws IOException {System.out.println(客户端开始启动);Scanner scannernew Scanner(System.in);while (true){//1.将输入的字符串转换成请求并发送给服务器String requestscanner.next();DatagramPacket requestPacketnew DatagramPacket(request.getBytes(),request.getBytes().length, InetAddress.getByName(serverIp),serverPort);socket.send(requestPacket);//2.尝试返回服务器的响应DatagramPacket responsePacketnew DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);//3.将响应转换成字符串并响应出来String responsenew String(responsePacket.getData(),0,responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {UDPClient udpClientnew UDPClient( 10.41.90.105,9090);udpClient.start();} } 我们写完UDP的服务器和客户端的代码之后为什么不close就是关闭数据报套接字 socket也是文件不关闭就会出问题了就会出现文件资源泄漏嘛资源泄漏就是代码中频繁的打卡文件但是不关闭在一个进程的运行过程中不断积累打开的文件逐渐消耗掉文件描述符表里的内容最终就消耗没了如果进程的生命周期很短打开一下没多久就关闭了谈不上泄漏 socket是文件描述符表中的一个表项每次打开一个文件就要占用一个位置。文件描述符是在pdb上的。跟随进程的 这个socket在整个程序运行过程中都是需要使用的不能提前关闭当socket不需要使用的时候意味着程序就要结束了进程结束此时随之文件描述符就会销毁了pcb都销毁了。随着销毁的过程被系统自动回收了。 先启动服务器再启动客户端     只要跑得足够久所有的雨都是阵雨。
http://www.zqtcl.cn/news/314937/

相关文章:

  • 做购物平台网站 民治百度导航地图下载
  • 东莞市主营网站建设服务机构青岛建站公司电话
  • 做网站技术wordpress漂亮手机网站模板下载
  • 网站怎么更新网页内容网络推广怎么找客户
  • 如何编写网站建设销售的心得适合装饰公司的名字
  • 有什么免费建网站网站pr查询
  • flash+xml网站模板简述网站制作的一般流程
  • 成都私人做网站建设怎么切页面做网站
  • 聊城做网站的公司论坛外链代发
  • 廊坊企业自助建站网站框架设计好后怎么做
  • 手机网站建设效果wordpress 目录改变
  • 做商城网站的项目背景图片c2750服务器做网站行吗
  • 北京市专业网站建设wordpress视频站
  • 知名网站制作公南充建设机械网站
  • 网站建设实践鉴定微商小程序制作
  • 盗用别人网站图做网站快速排名优化推广手机
  • 安徽网站建设服务平台wordpress自定义统计
  • 微网站开发方案模板建站宝盒哪个牌子好
  • 低价做网站网站制作天津
  • 成都网站推广外包门户网站素材
  • wordpress 拿站网站制作北京海淀
  • 惠州网站建设行业wordpress文章阅读权限
  • 做地方网站需要什么部门批准网页版微信二维码
  • o2o网站运维建设方案宿州市网站建设
  • 上海网站排名优化公司马蜂窝是什么做的网站
  • 邢台网站建设网站淘宝小程序入口
  • 公司起名自动生成器网站优化方法
  • 太原网站开发团队wordpress 链接 插件
  • 阿克顿巴网站建设的目的智通人才招聘网
  • 网站快速优化成营销型网站制作