张小明 2026/1/11 11:55:46
个人网站开发报告,电商网站开发选题依据,wordpress怎么用模版,重庆市建设工程信息网安全监督成绩查询操作系统会提供一组API#xff08;socket.api#xff09;接口进行网络通讯传输层的两个核心协议TCP#xff1a;有连接#xff0c;可靠传输#xff0c;面向字节流#xff0c;全双工UDP#xff1a;无连接#xff0c;不可靠传输#xff0c;面向数据报#xff0c;全双工有…操作系统会提供一组APIsocket.api接口进行网络通讯传输层的两个核心协议TCP有连接可靠传输面向字节流全双工UDP无连接不可靠传输面向数据报全双工有连接vs无连接这个连接不是物流意义上的连接是抽象虚拟概念的连接。在TCP中A和B通信A和B先建立连接然后A会保存B的信息,B也会保存A的信息让他们知道彼此之间是和谁在进行通信。UDP中则不会保存这样的信息不管对方是谁这个就叫做无连接举例子结婚两个人结婚就之后会有结婚证一式两份上面就会写着对方的信息比如A是B的老公B是A的老婆。这个就叫做有连接可靠传输vs不可靠传输在网络传输中丢包是很常见的事情受到外界的各种干扰就会导致丢包当我们发出一个数据包的时候并不指望他能够100%到达对方可靠传输并不能100%的送达只是说尽可能的送达不可靠传输管你那么多我送了到不到就不关我事了可靠传输虽然送达的完整度高但是要付出效率低的代价不可靠传输虽然送达完整度低但是效率高。面向字节流vs面向数据报面向字节流以字节为基本单位读写数据支持任意长度会出现粘包的问题读一半面向数据报以一个数据报为基本单位读写数据每次读取必须1个完整的数据报不支持任意长度但是不会出现粘包全双工vs半双工全双工一个通信链路中支持双向通信能读也能写半双工一个通信链路中支持单向通信只能写或者只能读Socket.api进行网络编程在计算机中文件广义上来说是操作系统操作管理的一种形式同时硬件也可以抽象成一个文件进行统一的管理。网卡socket文件操作过程就和操作普通的文件差不多打开读写关闭之所以不直接操作网卡是因为不好操作所以转化成文件相当于遥控器DategramSocket表示的是通过操作系统调用socket.api来操作网卡构造方法相当于打开文件第一个构造方法是随机绑定一个端口号第二个是指定端口号一个是接收一个是发送注意传入的是一个完整的数据报因为你接收和发送的肯定是一个完整的数据报DatagramPacket表示的是一个完整的UDP数据报UDP的数据包的载荷数据可以通过构造方法来指定传入和传出使用UdpEchoClient/Server模拟回显服务器UdpEchoServer思路首先声明一个变量类型是datagramsocket然后在构造方法中传入一个端口号同时初始化之前的变量这个变量是datagramsocket类型的这个类就相当于一个代理人因为我们无法直接调用网卡这个类就相当于一个代理人向操作系统申请一个窗口和网卡交流之后在start方法中要写入一个死循环因为我们要让服务器进行不间断的工作服务器的处理请求的过程一般分为三步第一步创建一个UDP数据包读取请求最好使用一个数组类型这样读取的快一些然后使用socket.receive去读取注意这个是一个阻塞的方法会等待客户端输入假如客户端输入了因为网络传输的只能说二进制所以下一步就是需要把这些二进制转成string类型第二步就是响应请求这里我用的是回显式所以暂时先不管第三步就是返回数据给客户端我们要把之前转成字符串的转成二进制这样才能在网络上传播传播的时候要注意指定ip和端口号最后返回即可。具体代码实现这段代码中首先是声明一个datagramsocket类型的变量然后在构造方法中我会传入一个端口号因为我们在java中是无法直接操作网卡的所以要借助datagramsocket这个类可以理解为代理人去和操作系统申请让我们可以和网卡进行沟通进而可以进行读写操作。这里更是核心中的核心首先因为服务器需要不间断的进行工作所以在这个start方法中我们需要加入一个死循环来确保他能够24小时不间断工作黑奴。服务器处理请求一般是分为三步第一步读取并解析请求首先我们需要提前准备好一个空的请求包这个是为了之后在客户端输入的时候我们能够读取到信息然后使用socket.receive去读取这个数据包接着需要把这些去读到的数据转化成字符串方便我们能看懂第二步根据请求计算响应核心由于我这里演示的是回显式所以就比较简单第三步返回响应值因为之前我们把他拆成字符串了所以这个时候我们需要把他变回去成为二进制的数据然后把他装到一个数据包里去这个时候要注意给出发送的地址和端口号最后发送即可。可能你会有一个疑问之前不是说UDP是无连接的吗这个指的是长久的连接一次的连接他是可以记住的过了就忘了所以这个时候可以获取到源IP和端口。可能你还有一个疑问既然说网卡可以抽象成文件那打开不要关闭吗好问题不需要关闭因为我们这个是服务器关了还咋服务。还有一个疑问当客户端没有发消息的时候这个服务器在干啥忙等吗并没有还记得我之前说receive方法那里吗带有阻塞的兄弟会阻塞等待直到客户端有消息传入。最后一步打印日志前面的是格式后面的是一一对应的东西分别打印请求的ip和端口号还有请求是啥回应是啥。源码package NetWork; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * Created with IntelliJ IDEA. * Description: * User: zhany * Date: 2025-12-14 * Time: 13:04 */ public class UdpEchoServer { //socket是一个可以和网卡通讯的读就相当于在网卡上收取信息写就是通过网卡发送 //首先先定义一个变量用来存放之后的行为 DatagramSocket socket null; public UdpEchoServer (int port) throws SocketException { //指定一个端口号让服务器使用 socket new DatagramSocket(port); } public void start() throws IOException { System.out.println(服务器启动); //因为服务器需要7*24小时不间断工作所以套一个while死循环 while (true){ //处理请求的过程分为三步 //1.读取请求并解析 //这一步是创建一个UDP的数据包传入的字节数组就是UDP的载荷 DatagramPacket requestPacket new DatagramPacket(new byte[1024],1024); socket.receive(requestPacket); //把读取到的二进制转成有效的字符串,使用getdata获取到有效的字节数组getlength获取到有效的长度再string String request new String(requestPacket.getData(),0,requestPacket.getLength()); //2.根据请求计算响应 //因为写的是回显式服务器所以不用管先 String response process(request); //3.返回响应值 //因为前面把他转成了字符串所以现在需要把他转成二进制的要注意最后不是response.length同时要给出这个 //回应的端口号和ip 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.getAddress().toString(), requestPacket.getPort(),request,response); } } private String process(String request) { return request; } public static void main(String[] args) throws IOException { UdpEchoServer udpEchoServer new UdpEchoServer(9090); udpEchoServer.start(); } }UdpEchoClient思路客户端其实和服务器端有点类似他也没有办法直接操作网卡所以他也需要寻找一个代理人datagramsocket去帮他开个通话窗口去读写网卡的数据逻辑也是比较简单的首先我们知道UDP是无连接的所以我们需要在构造方法中传入一个源地址和端口号让我们知道去访问哪个服务器核心让用户输入要发送的内容然后我们需要构建一个数据包载荷里面把用户输入的全部转成二进制的需要知道这个有啥和有多长其次需要知道这个包要去到哪里哪个端口号然后发送出去就ok然后需要创建一个新的数据包载荷等待服务器返回的值然后把返回的二进制解析成为字符串然后展示出来结束第一步首先创建一个datagramsocket类型的变量因为这个和服务端的一样是无法直接操作网卡的所以也是需要借助这个代理人的因为UDP是无连接所以他不知道要去到哪里这个时候我们就需要告诉他去到哪里在构造方法中需要传入访问的IP地址和端口号。核心方法start首先让用户输入想要发送的然后接下里就简单了把用户输入的直接开始分解分解成二进制的数据放到一个数据包中去注意在创建这个数据包的时候需要指定传输的ip和端口号然后发送就行接着需要创建好一个空的数据包用来读取服务器返回的值再把返回来的值解析成字符串最后打印出来注意这个“127.0.0.1”是环回IP无论你本机的真实IP是啥都是可以进行访问的这两个程序在同一个电脑上确实是可以进行互传消息的那如果在两个电脑上呢如果是在同一个局域网的情况下是可以进行互发消息的如果不在同一个局域网下就无法进行发消息源码package NetWork; import java.io.IOException; import java.net.*; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: zhany * Date: 2025-12-14 * Time: 18:52 */ public class UdpEchoClient { private DatagramSocket socket null; //因为UDP并不会记录对方是谁所以要自己保存 private String serverIp; private int serverPort; public UdpEchoClient(String serverIp, int serverPort) throws SocketException { this.serverIp serverIp; this.serverPort serverPort; socket new DatagramSocket(); //这里必须用无参的因为客户端如果是固定的不太可能,可以是固定但是非常不可能 } public void start() throws IOException { Scanner scanner new Scanner(System.in); while (true){ System.out.println(请输入你要发送的内容); if (!scanner.hasNext()){ break; } String request scanner.nextLine(); //构造数据载荷的同时要注意ip和端口号 DatagramPacket requestPacket new DatagramPacket(request.getBytes(), request.getBytes().length, InetAddress.getByName(serverIp), serverPort); //发送 socket.send(requestPacket); //接收 DatagramPacket responsePacket new DatagramPacket(new byte[1024], 1024); socket.receive(responsePacket); //解析 String response new String(responsePacket.getData(),0,responsePacket.getLength()); System.out.println(response); } } public static void main(String[] args) throws IOException { UdpEchoClient udpEchoClient new UdpEchoClient(127.0.0.1,9090); udpEchoClient.start(); } }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
公司网站开发和设计 怎么开票教育wordpress模板下载地址
01 引言 银行系统的安全级别应该是相当高的,与银行接口对接(银企直联)过程中也遭遇了平时开发中不常见的问题,甚至当时表示不理解。 前前后后对接了两家银行:招商银行和中信银行,安全要求各异,也…
安踏网站建设策划方案用wordpress建站域名和空间哪里买比较好
YOLO目标检测实战入门:从零跑通你的第一个检测Demo 在智能摄像头自动识别行人、无人机实时追踪移动目标、工厂产线自动检出缺陷产品的背后,有一项核心技术正默默支撑着这些“看得见”的智能——目标检测。 而在众多目标检测算法中,有一个名字…
江西省建设网站公司建设网站学什么语言
Wan2.2-T2V-A14B NPM安装脚本:一键部署自动化流程 在影视预演、广告生成和虚拟内容创作领域,一个现实的挑战始终存在:如何快速将前沿AI模型从论文或Demo转化为可稳定运行的本地服务?尤其当面对像文本到视频(Text-to-V…
做网站导航cms企业网站开发公司排行榜
如何让BJT真正“放大”信号?深入解析放大区的工作原理与实战设计你有没有遇到过这种情况:电路明明用了三极管,输入信号也加上了,可输出波形却严重失真、增益远低于预期?甚至一上电就发热烧管?问题很可能出在…
专门做旅游尾单的网站网级移动营销下载
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…