网络编程 一

一、UDP socket api的使用

Java        把系统原生的封装了.

核心的类有两个:

1   ->   DatagramSocket

操作系统中,有一类文件,就叫socket文件.

socket文件,抽象表示了 " 网卡"这样的硬件设备.

进行网络通信最核心的硬件设备网卡

通过网卡发送数据,就是写socket文件

通过网卡接收数据,就是读socket文件

2   ->   DatagramPacket

UDP面向数据报,每次发送接收数据的基本单位,就是一个UDP数据报.

表示了一个UDP数据报

二、回显服务器

这是网络编程中,最简单的程序了,网络编程的hello world

客户端发什么请求返回什么请求

1. socket api的使用

2. 典型的客户端服务器基本工作流程

1.1 服务器代码

 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);//读到的字节数组,转成String方便后续的逻辑处理String request = new String(requestPacket.getData(),0,requestPacket.getLength());//2.根据请求计算响应String response = process(request);//3.把响应返回到客户端//构造一个DatagramPacket 作为响应对象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 server = new UdpEchoServer(9090);server.start();}

1.2 客户端代码

 private DatagramSocket socket = null;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 {System.out.println("客户端启动");Scanner scanner = new Scanner(System.in);while(true){System.out.print("->");if(!scanner.hasNext()){//没有输入就break;break;}String request = scanner.next();DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length,InetAddress.getByName(serverIP),serverPort);socket.send(requestPacket);DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);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 client = new UdpEchoClient("127.0.0.1",9090);client.start();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0基础从前端到Web3 —— Mine Clearance Frontend(二)

在一的基础上继续往下,本篇主要是链上调用部分,让整个项目可以进行最基本的扫雷游戏。 S u i M o v e \mathit {Sui\ Move} Sui Move 链上部署的自主实现的简单扫雷游戏可以点击查看,只不过这里将区域大小扩大为了 10 20 \text {10}\ \tim…

力扣Hot100-73矩阵置零(标记数组)

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2: 输入&…

JavaWeb Sevelet学习 创建Sevelet程序

Servlet 是JavaWeb中的开发动态Web一门技术 是由Sun公司提供的一个接口,允许开发者编写运行在服务器(Tomcat)上的Java程序,这些程序可以 生成动态网页内容, 响应客户端的请求。简单来说,Servlet就是Java E…

今日arXiv最热大模型论文:LoRA又有新用途,学得少忘得也少,成持续学习关键!

自大模型(LLM)诞生以来,苦于其高成本高消耗的训练模式,学界和业界也在努力探索更为高效的参数微调方法。其中Low-Rank Adaptation(LoRA)自其诞生以来,就因其较低的资源消耗而受到广泛关注和使用…

瑞芯微RV1126——交叉编译与移植

一、搭建这个nfs服务挂载 (1) sudo apt install nfs-kernel-server (2) 然后在你的ubuntu创建一个nfs共享目录: (3) sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务 (4) 修改配置文件: sudo vim /etc/exports 在这个配置文件里面添加:/hom…

C语言/数据结构——每日一题(设计循环队列)

一.前言 上一次我们分享了关于队列的基本实现——https://blog.csdn.net/yiqingaa/article/details/139033067?spm1001.2014.3001.5502 现在我们将使用队列知识来解决问题——设计循环队列:https://leetcode.cn/problems/design-circular-queue/submissions/533299…

50.WEB渗透测试-信息收集-CDN识别绕过(3)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:49.WEB渗透测试-信息收集-CDN识别绕过(2) 关于cdn的识别方法内容…

智慧监狱人员行为识别监测系统

智慧监狱人员行为识别监测系统是基于神经网络AI视觉智能分析算法开发的技术。智慧监狱人员行为识别监测系统利用现场监控摄像头,通过对人体活动骨架的结构化分析,根据人体运动轨迹定义了多种异常行为,从而实现对监舍内的静坐不动、离床、攀高…

Mixiy(米思齐)安装

Mixiy(米思齐)安装 官网地址:爱上米思齐 打开官网,选择下图的软件进行下载 复制提取码,点击链接跳转到网盘进行下载,选择(RC4完整版) 下载完成后,解压到合适的位置,进入文件夹,双击Mixly.exe即…

Docker 部署Jenkins

1、运行镜像 docker run --namejenkins \--restartalways \--privilegedtrue \-u root \-p 8080:8080 \-p 50000:50000 \-v /home/docker/jenkins/jenkins_home:/var/jenkins_home \-v /usr/bin/docker:/usr/bin/docker \-v /var/run/docker.sock:/var/run/docker.sock \-e TZ…

【Crypto】MD5

文章目录 MD5解题感悟 MD5 提示的很明显MD5 小小flag,拿下! 解题感悟 没啥感悟…

Java输入与输出详解

Java输入和输出 前言一、Java打印Hello World二、输出到控制台基本语法代码示例格式化字符串 三、从键盘输入读入一个字符正确写法 使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 N 个数字 前言 推荐一个网站给想要了解或者学习人工智能知识的读者,这…

MySQL-性能分析

1、数据库服务器的优化步骤 2、查看系统性能参数 可以使用show status语句查询一些MySQL数据库服务器的性能参数 执行频率语法格式:show [ global | session ] status like 参数 ;常用性能参数如下所示 参数名说明connection连接MySQL服务器的次数upti…

Autodesk 3ds Max下载,3ds MAX 2024三维建模渲染软件安装包下载安装

3ds MAX中文版,其强大的功能和灵活的操作为广大用户提供了无限的创意空间,使得高质量动画、最新游戏、设计效果等领域的制作需求得以完美满足。 ​ 作为一款三维建模软件,3ds MAX中文版具备极高的建模精度和渲染质量。它支持多种建模方式&am…

【Fiddler抓包工具】第四节.断点设置和弱网测试

文章目录 前言一、断点设置 1.1 全局断点 1.2 局部断点 1.3 打断点的几种常用命令 1.4 篡改响应报文二、弱网测试 2.1 网络限速 2.2 精准限速总结 前言 一、断点设置 1.1 全局断点 特点: 中断Fiddler捕获的所有请求,包括…

在链游中,智能合约如何被用于实现游戏内的各种功能

随着区块链技术的快速发展,链游(Blockchain Games)作为区块链技术的重要应用领域之一,正逐渐展现出其独特的魅力和优势。其中,智能合约作为链游的核心技术之一,对于实现游戏内的各种功能起到了至关重要的作…

【C++初阶】—— 类和对象 (下)

📝个人主页🌹:EterNity_TiMe_ ⏩收录专栏⏪:C “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 类和对象 1. 运算符重载运算符重载赋值运算符重载前置和后置重载 2. 成员函数的补充3. 初始化列…

CentOS上升级glibc2.17至glibc2.31

glibc是Linux系统中的重要组件之一。在CentOS中,glibc通常是作为系统的默认C标准库使用的,因为它是许多软件的基础库。在CentOS中,glibc的版本通常与CentOS版本一起发布。因为CentOS通常会优先选择稳定性而不是最新性,所以CentOS使…

Vue项目如何进行XSS防护

前言 在目前主推网络安全的情况下,很多开发项目都需要在上线前进行渗透测试,当符合渗透测试标准及没有安全漏洞即可正常上线,当前还会有代码审计的,这个另当别论。 如何对XSS进行防护 在很多的富文本编辑器项目中,x…

leecode热题100---994:腐烂的橘子

题目: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回…