逸学java【初级菜鸟篇】12.网络通讯编程

hi,我是逸尘,一起学java吧


目标(任务驱动)

请练掌网络通讯的内容。

局域网和互联网

局域网英文:Local Area Network,缩写:LAN,是指一群通过一定形式连接起来的计算机,可以是两台计算机组成也可以是同一区域上千台计算机组成。

将LAN延伸到更大范围,称之为广域网WAN

我们的互联网就是无数个WAN和LAN组成的。

网络编程

实现网络编程的三要素

ip地址,端口,协议

网络协议

规定计算机之间规则的,就像法律一样,但是各个国家不同,所以有各种协议。

TCP/IP协议

我们的Internet网络采用的是TCP/IP协议,包括两部分传输控制协议网络(际)协议

我们来看4层模型的传输层和网络层

 

IP协议

在网际协议中主要是我们的IP协议

IP协议全称为“网际互连协议(Internet Protocol)

由其网络为其分配的ip地址作为计算机的身份,到目前为止,ip地址用4字节也就是32位二进制数表示,为了方便使用,每个字节取用十进制显示称位IPv4,IPv6是为了解决IPv4不足的问题。

TCP和UDP协议

在传输控制协议中主要是我们的TCP协议和UDP协议

TCP协议
使用tcp协议,必须双方先建立连接,它是一种面向连接的可靠通信协议。
传输前,采用"三次握手"方式建立连接,所以是可靠的。
在连接中可进行大数据量的传输。
连接,发送数据都需要确认,且传输完毕后,还需释放已建立的连接,通信效率较低。
tcp协议通信场景
对信息安全要求较高的场景,例如:文件下载,金融等数据通信。

UDP协议

udp是一种无连接,不可靠传输的协议。
将数据源ip,目的地ip和端口封装成数据包,不需要建立连接
每个数据包的大小限制在64kb内
发送不管对方是否准备好,接收方收到也不确认,故是不可靠的
可以广播发送,发送数据结束时无需释放资源,开销小,速度快。
udp协议通信场景
语音通话,视频会话等。

端口

端口:应用程序在设备中唯一的标识。

那么我们接下来说一下端口,在程序设计中是一个假想概念,被规定为0~6553的整数。

普通网络应用程序使用1024以上端口HTTP一般是80

套接字是将端口和应用程序连接的假想装置

 

InetAddress类

 是与IP地址相关的类

package com.yd.tcp;import java.net.InetAddress;
import java.net.UnknownHostException;public class One {public static void main(String[] args) throws UnknownHostException {InetAddress ip=InetAddress.getLocalHost();String localname = ip.getHostName();String localip = ip.getHostAddress();System.out.println("本机名:"+localname);System.out.println("本机地址:"+localip);}
}

ServerSocket类

是与服务器套接字相关的类,主要是等待网络上的"请求",可以指定端口来等待连接的套接字,服务器套接字可以一次一和一个客户端套接字连接,如果多个则,会将其他客户端套接字存入队列中,如果大于最大容量就会拒绝,默认是50。

方法

调用accept()方法会返回一个连接的Socket对象,服务器端的socke对象使用getOutputStream()方法获得输出流,客户端使用getInputStream()方法获得其输入流。

也就是服务器向输出流写入信息时,客户端相应读取输入流。

DatagramPacket类

DatagramSocket类

TCP网络程序设计

客户端发信息给服务器,但是服务器不能向客户端发信息我们称位单向通信。

双方套接字连接成功就可以发送流 来进行信息传输接收。

服务端

package com.yd.tcp;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class ServerDEmo {public static void main(String[] args) {try {System.out.println("服务端(元神)启动");//注册端口ServerSocket serverSocket = new ServerSocket(8848);//等待,建立一个socketSocket acceptsocket = serverSocket.accept();//字节输入流InputStream inputStream = acceptsocket.getInputStream();//包装成字符流BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));//读String msg;while ((msg=bufferedReader.readLine())!=null){System.out.println(acceptsocket.getLocalAddress()+"说"+msg);}}catch (Exception e){e.printStackTrace();}}
}

客户端

package com.yd.tcp;import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;public class Two {public static void main(String[] args) {try{//创建socketSocket socket = new Socket("127.0.0.1", 8848);//输出流,发送信息OutputStream out = socket.getOutputStream();//字节流包装成打印成流PrintStream printStream = new PrintStream(out);//发消息printStream.println("我是TCP客户端");printStream.flush();//关闭socket.close();}catch (Exception e){e.printStackTrace();}}
}

UDP网络程序设计


import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class ServerDemo {public static void main(String[] args) throws Exception {System.out.println("服务端启动");//创建接收对象DatagramSocket datagramSocket = new DatagramSocket(8888);//创建数据包对象接收数据byte[] buffer=new byte[1024*64];DatagramPacket packet=new DatagramPacket(buffer, buffer.length);//等待接收数据包datagramSocket.receive(packet);//取出数据String s = new String(buffer);System.out.println("收到了"+s);String s1 = packet.getSocketAddress().toString();System.out.println("对方地址"+s1);int port = packet.getPort();System.out.println("对方端口"+port);datagramSocket.close();}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ClientDemo {public static void main(String[] args) throws Exception {//发送数据System.out.println("发送");//创建发送对象,默认端口DatagramSocket socket = new DatagramSocket();byte[] buffer="数据测试10".getBytes();DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getLocalHost(), 8888);//发送数据出去socket.send(packet);socket.close();}
}

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

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

相关文章

Java封装讯飞星火大模型历险记

问题描述与分析 现状描述与目标 在使用讯飞星火大模型API的过程中,API的返回结果在可以在其他线程中进行分次打印,但是在main方法中直接打印返回结果,显示为空。这种情况下不利于二次封装,希望在main方法中获取完整的API返回结果…

Linux——基本指令(一)

写在前面: 我们云服务器搭建的Linux系统,使用的镜像版本CentOS 7.6,使用的Xshell远程连接云服务器 前面我们使用超级管理员root账号登录,一般我们使用普通用户登录,那么如何创建新用户呢? 1.创建新用户 &#xff08…

Ubuntu22.04无需命令行安装中文输入法

概要:Ubuntu22.04安装完成后,只需在设置中点点点即可完成中文输入法的安装,无需命令行。 一、安装中文语言包 1、点击屏幕右上角,如下图所示。 2、点击设置 3、选择地区与语言,点击管理已安装的语言 4、点击安装 5、输…

❀My学习Linux命令小记录(10)❀

目录 ❀My学习Linux命令小记录(10)❀ 36.fold指令 37.expr指令 38.iperf指令 39.telnet指令 40.ssh指令 ❀My学习Linux命令小记录(10)❀ 36.fold指令 功能说明:控制文件内容输出时所占用的屏幕宽度&#xff0c…

上门按摩APP小程序,抓住机遇创新服务新模式;

上门按摩APP小程序:抓住机遇,创新服务新模式; 随着现代人对生活质量要求的提高,上门按摩服务正成为一种新的、受欢迎的生活方式。通过APP小程序,用户可以轻松预约按摩服务,解决身体疲劳问题,享受…

Python程序员入门指南:学习时间和方法

文章目录 标题Python程序员入门指南:学习时间、方法和就业前景学习方法建议学习时间 标题 Python程序员入门指南:学习时间、方法和就业前景 Python是一种流行的编程语言,它具有简洁、易读和灵活的特点。Python可以用于多种领域,如…

设计模式基础(1)

目录 一、设计模式的定义 二、设计模式的三大类别 三、设计模式的原则 四、主要设计模式目录 4.1 创建型模式(Creational Patterns) 4.2 结构型模式(Structural Patterns) 4.3 行为型模式(Behavioral Patterns&…

重启路由器可以解决N多问题?

为什么重启始终是路由器问题的首要解决方案? 在日常的工作学习工作中,不起眼的路由器是一种相对简单的设备,但这仍然是我们谈论的计算机。 这种廉价的塑料外壳装有 CPU、随机存取存储器 (RAM)、只读存储器 (ROM) 和许多其他组件。 该硬件运行预装的软件(或固件)来管理连接…

牛客算法心得——kotori和素因子(dfs)

大家好,我是晴天学长,传智杯的题,一个经典的全排列找最小的问题,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .kotori和素因子 链接:https://ac.nowcod…

使用Redis构建简易社交网站(1)-创建用户与动态界面

目的 本文目的:实现简易社交网站中创建新用户和创建新动态功能。(完整代码附在文章末尾) 相关知识 本文将教会你掌握:1.redis基本命令,2.python基本命令。 redis基本命令 hget:从哈希中获取指定域的值…

Leetcode2661. 找出叠涂元素

Every day a Leetcode 题目来源:2661. 找出叠涂元素 解法1:哈希 题目很绕,理解题意后就很简单。 由于矩阵 mat 中每一个元素都不同,并且都在数组 arr 中,所以首先我们用一个哈希表 hash 来存储 mat 中每一个元素的…

Redis--15--缓存穿透 击穿 雪崩

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 缓存穿透 击穿 雪崩运行速度:1 缓存穿透问题描述:如何解决: 2 缓存击穿问题描述:如何解决: 3 缓存雪崩说明:解决方案: 缓存穿透 击穿 雪崩 问题描述: 由于海量的用…

springboot单元测试关闭日志

在logback中关闭日志 在test目录下新建文件夹resources&#xff0c;新增文件logback-test.xml文件 在logback-test.xml 文件中&#xff0c;添加内容&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <configuration><include resourc…

一缕青丝寄相思

10年8月16日七夕节男孩向女孩表白,女孩不知道那天是七夕,也没有读懂男孩的爱,女孩在9月22日中秋,向男孩打开了心门,男孩却没有懂女孩的心思.13年后的一封问候邮件,一束女孩的长发和回不去的青春 洒满阳光的午后 转眼间看到你的笑脸 微笑着你对我说 遇上你认识我真好 你说得好莫…

免费HTTPS证书

什么是HTTPS呢&#xff1f;HTTPS全称为Hyper Text Transfer Protocol Secure&#xff0c;即超文本传输安全协议。它是在HTTP的基础上加入了SSL/TLS协议&#xff0c;可以对传输的数据进行加密&#xff0c;有效防止数据被第三方截取或篡改&#xff0c;从而保障了用户的信息安全。…

实时设计#N3期训练营DONE,ComfyUI中文社区@上海

作为主办方&#xff0c;我们非常高兴能够举办这次AIGC训练营&#xff0c;重点解决Comfyui的安装和入门。活动在下午1:30开始&#xff0c;在上海永兴仓库举行。 首先&#xff0c;我们向参与者介绍了本次活动的目的和安排&#xff0c;让大家对活动有一个清晰的认识。 接着&#x…

J-Link RTT的使用(原理 + 教程 + 应用 + 代码)

MCU:STM32F407VE MDK:5.29 IAR:8.32 目录--点击可快速直达 目录 写在前面什么是RTT?RTT的工作原理RTT的性能快速使用教程高级使用教程附上测试代码2019年12月27日更新--增加打印float的功能 写在前面 本文介绍了J-Link RTT的部分使用内容&#xff0c;很多地方参考和使用…

28、DS18B20温度传感器

DS18B20介绍 DS18B20是一种常见的数字温度传感器&#xff0c;其控制命令和数据都是以数字信号的方式输入输出&#xff0c;相比较于模拟温度传感器&#xff0c;具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围&#xff1a;-55C 到 125C 通信接口&#xff1a;1-Wire…

DeDeCMS v5.7 SP2 正式版 前台任意用户密码修改(漏洞复现)

1.环境搭建 PHP 5.6 DeDeCMSV5.7SP2 正式版 安装phpstudy&#xff0c;https://www.xp.cn/小皮面板 先启动Apache2.4.39和MySQL5.7.26 如果他会让你下载&#xff0c;点击是就好&#xff01; 让后点击网站—>点击创建网站 域名自己创建&#xff0c;自己取 其他的不变 点击…

6-69.鸭子也是鸟

按要求完成下面的程序&#xff1a; 1、定义一个Bird类&#xff0c;包含一个void类型的无参的speak方法&#xff0c;输出“Jiu-Jiu-Jiu”。 2、定义一个Duck类&#xff0c;公有继承自Bird类&#xff0c;其成员包括&#xff1a; &#xff08;1&#xff09;私有string类型的成员na…