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

网站建设方案书微商城专业的网站建站公司

网站建设方案书微商城,专业的网站建站公司,中文响应式网站,关于推进网站集约化建设的讲话个人主页#xff1a;兜里有颗棉花糖 欢迎 点赞#x1f44d; 收藏✨ 留言✉ 加关注#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得#xff0c;欢迎大家在评论区交流讨论#x1f48c; 前言 我们如果… 个人主页兜里有颗棉花糖 欢迎 点赞 收藏✨ 留言✉ 加关注本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得欢迎大家在评论区交流讨论 前言 我们如果想让应用程序进行网络通信的话就需要调用传输层为应用层提供的API。传输层提供的协议主要有两个UDP和TCP这两个协议提供了两套不同的API。操作系统给这些应用程序提供的这些用于网络通信的API起了一个名字即socket api。 目录 一、UDP和TCP特点对比二、UDP数据报套接字编程三、DatagramSocket四、DatagramPacket五、通过UDP数据报实现回显服务器echo server5.1服务器端服务器端代码5.2客户端客户端代码 一、UDP和TCP特点对比 UDP特点无连接、不可靠传输、面向数据报全双工。 TCP特点有连接、可靠传输、面向字节流全双工。 连接我们知道JDBC编程中先创建DataSource然后再通过DataSource创建Connection。对于TCP编程的话来存在像JDBC类似的连接方式。可靠传输/不可靠传输可靠传输就是主机A尽可能的将消息传给zhujiB并且当消息传输失败的时候主机A可以感知到当然当消息传输成功的时候主机A可以得知自己发送的消息传输完毕。TCP是可靠传输但是与此同时TCP付出的代价就是TCP在进行信息传输的时候传输效率有所降低、UDP是不可靠传输但是UDP在进行信息传输的时候传输效率得到了提供。 网络安全方面网络安指的是如果我们传输的数据被黑客有的地方提出TCP比UDP更加安全这种说法是错误的。 - 面向字节流TCP和文件操作是类似的都是流式的操作。这里传输的单位是字节我们称之为字节流。TCP协议的数据传输可以传输任意长度的字节流数据但是一次读写的数据数量通常是由发送方和接收方的缓冲区大小决定的比如我们可以一次性读写50字节的数据可以一次性读写100字节的数据。。面向数据报UDP是面向数据报读写的基本单位单位是一个UDP数据包。在UDP协议中数据被封装在UDP数据报中每个UDP数据报包含一些列的数据和属性。全双工全双工即一个通道可以双向通信而半双工意思就是一个通道只能偶单向通信。我们家里使用的网线就是全双工的。 二、UDP数据报套接字编程 UDP数据报套接字编程是使用UDP协议进行网络通信的一种编程方式。 在Java中UDP是通过java.net.DatagramSocket类和java.net.DatagramPacket类来提供API的。 java.net.DatagramSocket类代表一个UDP套接字对象Socket对象 操作系统使用文件这样的概念来管理软硬件资源其实文件对于操作系统来说是一个非常广义的概念不仅仅可以代表硬盘上的文件也可以代表着其它情况的文件文件这个概念其实有很多种含义不仅仅是针对硬盘上的文件也可以是其它的设备比如键盘接入到计算机之后计算机也是把键盘当作文件去进行处理显示器接入到计算机之后显示器也会被当作文件来处理。 对于网卡来说操作系统也是使用文件的方式来管理网卡的表示网卡的这类文件我们就称之为socket文件。 在Java中socker对象就对应系统中的socker文件而socker文件又是用来管理网卡的即最终依然是落到网卡我们要想进行网络通信的话必须要通过socker对象把网卡关联起来然后我们才能基于网卡来发送接收数据 在java中java.net.DatagramPacket用来表示UDP数据报。 DatagramPacket对象可以代表系统中设定的UDP数据报的二进制结构。 以上java.net.DatagramSocket类和java.net.DatagramPacket类是我们进行UDP编程中必不可少了两个类。 三、DatagramSocket DatagramSocket是UDP Socket用于发送和接收UDP数据报。 DatagramSocket构造方法分为有参和无参如下 方法签名方法说明DatagramSocket()创建一个UDP数据报套接字的Socket对象绑定到本机任意一个随机端口一般用于客户端DatagramSocket(int port)创建一个UDP数据报套接字的Socket对象绑定到本机指定的端口一般用于服务端 DatagramSocket类方法 方法签名方法说明void receive(DatagramPacket p)从此套接字接收数据报如果没有接收到数据报该方法会阻塞等待void send(DatagramPacket p)从此套接字发送数据报包不会阻塞等待直接发送void close()关闭此数据报套接字 我们可以看到前两个方法的参数都是DatagramPacketUDP是一种面向数据报的传输层协议传输数据的基本单位就是数据报即DatagramPacket对象。 四、DatagramPacket DatagramPacket构造方法 方法签名方法说明DatagramPacket(byte[] buf, int length)构造一个DatagramPacket以用来接收数据报接收的数据保存在字节数组第一个参数buf中接收指定长度第二个参数lengthDatagramPacket(byte[] buf, int offset, int length, SocketAddress address)构造一个DatagramPacket以用来发送数据报发送的数据为字节数组第一个参数buf中从0到指定长度第二个参数length。address指定目的主机的IP和端口号 DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)我们知道DatagramPacket表示一个UDP数据报则这个数据报就必须承载一定的数据通过手动指定的byte[]数组来作为存储数据的空间然后通过SocketAddress address来指定目的ip和目的端口。 DatagramPacket 方法 方法签名方法说明InetAddress getAddress()从接收的数据报中获取发送端主机IP地址或从发送的数据报中获取接收端主机IP地址int getPort()从接收的数据报中获取发送端主机的端口号或从发送的数据报中获取接收端主机端口号byte[] getData()获取数据报中的数据即获取的是UDP数据报中的载荷部分即完整的应用层数据报 五、通过UDP数据报实现回显服务器echo server Udp的回显服务器:客户端发送的请求是什么服务器返回的响应就是什么 现在我们编写一个回显服务器程序 5.1服务器端 先来看服务器端的代码编写 上图代码中有时候创建对象的时候会失败最典型的创建对象失败的原因就是端口号被占用。 关于端口号端口号是用来区分主机上应用程序的一个应用程序可以占据主机上多个端口通常情况下一个端口只能被一个进程占用当然这样说有些太过于绝对了因为存在一些特殊情况这里不展开讨论。 所以当端口已经被别的进程占用时此时如果我们再创建socket对象来占用此端口的话就会报错。 对于一个服务器来说要做的工作主要有三个主要环节 1.读取请求并对请求进行解析2.根据请求计算出响应3.把相应返回给客户端 上述的三个环节对于第一步和第三步来说一般都是固定的流程和套路 第一步读取请求并对请求进行解析 DatagramSocket类方法中的receive(DatagramPacket p)方法中的参数DatagramPacket p是一个输出型参数传入receive方法中的对象是一个空的对象reveive内部就会对传入receive方法中的空的对象给填充上当reveive方法执行完毕之后就会得到一个充满内容的DatagramPacket 这里的DatagramPacker对象是用来保存数据的内存空间其中这里内存空间的申请是需要我们手动进行申请的。 然后我们就可以将requestPacket传入到receive方法中如下 这里有异常直接抛出即可。 当服务器一旦启动之后并进入到while循环中接着就会立即执行到receive方法。 我们知道服务器并不知道什么时候发出请求所以服务器要随时做好就接收来自客户端请求的信息。 但是当客户端的请求还没有达到服务器时。此时服务器这边就会进入到阻塞等待的状态直到阻塞等待到有请求到达客户端。 requestPacket是一个DatagramPacket对象它通过DatagramSocket的receive方法接收到的数据报会被存储在这个对象中。 requestPacket.getData()返回的是一个byte数组代表接收到的数据报的内容。requestPacket.getLength()返回的是接收到的数据报的长度。 然后通过String类的构造函数String(byte[] bytes, int offset, int length)将接收到的数据报的内容转换成字符串。在这个例子中使用了读取到的数据报的内容作为字节数组偏移量为0长度为接收到的数据报的长度。 最终request变量中存储的就是从数据报中提取出来的字符串内容。 requestPacket.getSocketAddress()当前我们要把数据报发送给客户端所以此时我们就需要知道客户端的ip和端口是什么此类信息均在DatagramPacket对象中包含着即DatagramPacket中就包含着通信双方的ip和端口号即客户端的ip、端口服务器端的ip、端口均在DatagramPacket中保存着所以我们就可以通过getSocketAddress()方法获取到当前客户端的ip和端口。 服务器端代码 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;// Udp的回显服务器:客户端发送的请求是什么服务器返回的响应就是什么 public class UdpEchoServer {private DatagramSocket socket null;// 构造方法public UdpEchoServer(int port) throws SocketException {socket new DatagramSocket(port);}public void start() throws IOException {System.out.println(服务器启动!!!);while(true) {// 服务器需要长期反复的执行针对客户端请求处理的逻辑// 对于一个服务器来说要做的工作主要有三个主要环节// 1.读取请求并对请求进行解析DatagramPacket requestPacket new DatagramPacket(new byte[4096],4096);socket.receive(requestPacket);// 可以将DatagramPacket对象中的字节数组转换成字符串,这样的转字符串的前提时后续客户端发送的数据是一个文本字符串// 如果客户端发送的数据是一个二进制,这里就不合适了// 大体梳理一下:通过DatagramSocket类中的receive方法来读取到requestPacket数据报对象中的内容,// 然后再进一步的将数据报中的载荷提取并转换为字符串String request new String(requestPacket.getData(),0, requestPacket.getLength());// 2.根据请求计算出响应String response process(request);// 3.把相应返回给客户端// 此时要告知网卡要发送的内容以及要发给谁两部分内容DatagramPacket responsePacket new DatagramPacket(response.getBytes(),response.getBytes().length,requestPacket.getSocketAddress());socket.send(responsePacket);// 而对于这里的回显服务器来说不需要关心具体的流程因为回显服务器请求是什么返回的响应就是什么// 但是对于一个商业级的服务器来说最主要的代码就是完成第二步的代码编写// 记录日志方便观察System.out.printf([%s:%d] req: %s, resp : %s\n,requestPacket.getSocketAddress().toString(),requestPacket.getPort(),request,response);}}// 第二步:根据请求计算响应,由于我们写的程序是一个回显服务器,所以响应内容和请求是一致的,即请求是什么响应就是什么public String process(String request) {return request;}public static void main(String[] args) throws IOException {UdpEchoServer server new UdpEchoServer(9090);server.start();} }5.2客户端 客户端代码 import java.io.IOException; import java.net.*; import java.util.Scanner;public class UdpEchoClient {private DatagramSocket socket null;private String serverIp;private int serverPort;// 服务器的ip和服务器的端口public UdpEchoClient(String ip,int port) throws SocketException {serverIp ip;serverPort port;// 下面的new操作就不需要再指定端口了,而是让系统随机分配一个空闲端口socket new DatagramSocket();}// 让客户端反复的从控制台中读取用户输入的信息// 然后把这个内容构造成UDP请求发送给服务器再读取服务器返回的UDP响应// 最终显示再客户端的屏幕上public void start() throws IOException {Scanner scanner new Scanner(System.in);System.out.println(客户端启动!!!);while(true) {// 1.从控制台读取用户输入的用户输入的内容。System.out.printf(--); // 命令提示符来提示用户输入字符串String request scanner.next();// 2.构造请求对象并发送给服务器DatagramPacket requestPacket new DatagramPacket(request.getBytes(),request.getBytes().length,InetAddress.getByName(serverIp),serverPort);socket.send(requestPacket);// 3.读取服务器的响应,并解析出响应内容DatagramPacket responsePacket new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);String response new String(responsePacket.getData(),0,responsePacket.getLength());// 4.将结果打印到屏幕上System.out.println(response);}}public static void main(String[] args) {} }以上就是回显服务器程序的所有代码。 程序运行结果如下注意一定是服务器先开始运行 如果我们启动多个客户端的话此时服务器依然是可以应对的。 此时我们需要对我们的IDEA进行一些设置请看 可以看到两个客户端同时在跑。 本文到这里就结束了希望友友们可以支持一下一键三连哈。嗯就到这里吧再见啦
http://www.sczhlp.com/news/250680/

相关文章:

  • 开发一个商城网站多少钱合肥seo排名优化
  • 做公司网站需要多长时间ui做交互式网站吗
  • 电子商务网站开发教案wordpress 首页显示全文
  • 教学网站建设论文济南 论坛网站建设
  • 网站开发项目发展现状益阳网站建设网站
  • 微信小程序做网站域名注册了后怎么建设网站
  • 如何提交网站地图详情页设计说明
  • 先做网站主页还是先上架宝贝信融营销型网站建设
  • isulad容器使用教程
  • 毕设做网站太简单wordpress修改备案号
  • 百度有哪些网站可免费做软件推广网站怎样注册备案
  • 太原建站的模板高端娱乐网站建设
  • 如何进行网站的资源建设台州网站建设 推广公司
  • 电子商务网站设计与制作深圳网站制作企业邮箱
  • 做任务赚q币网站医疗网站
  • 做网站该注意哪些基本要素教育网站建站需求
  • 电商网站的模式做养生网站怎么赚钱
  • 三合一网站一般多少钱网站如果直接点击拨打电话
  • 服务网站推广方案请人建设网站需要注意什么
  • 福建众利建设工程网站东莞市城建工程管理局
  • 企业业务系统有哪些如何提高网站排名seo
  • 网站建设要学哪些软件遵义网站开发培训
  • 成都网站建设 平易云wordpress游戏系统模型
  • 怎么做类似淘宝一样的网站吗网页设计制作网站用什么软件
  • 电子线路板东莞网站建设给公司做网站需要什么
  • 网站不备案百度收录吗建筑网官网查证
  • 大连做网站科技有限公司企业网站做seo
  • 网站建设与实践心得中国化学工程第三建设有限公司
  • 网站实现功能物流网信息平台
  • 在线网站建设培训网站推广费用大概需要多少钱