4月16号总结

java学习

网络编程

1.网络分层

网络分层是将网络通信划分为不同的逻辑层次,每一层负责特定的功能,从而实现网络通信的模块化和标准化。常用的网络分层模型包括OSI(开放系统互联)模型和TCP/IP模型。

特点和作用:

  • 分层模型使得网络协议更易于设计、实现和维护,每一层都有明确定义的功能和接口。
  • 分层模型提供了标准化的接口和协议,不同厂商和组织之间可以基于共同的标准进行通信和互操作。
  • 每一层的功能清晰划分,有助于故障排除和性能优化。

总的来说,网络分层模型是一种组织网络通信的方式,将复杂的通信过程分解为多个层次,使得网络设计和管理更加简单和可靠。

2.网络编程三要素

2.1 IP地址

IP地址相当于每台计算机的标识符,也就是“名字”,如果想要实现计算机的网络通信,那么IP地址就是帮助你找到你想要通信的计算机的方式。

IP地址分类为IP4,和IP6。

IP4又四个字节组成,32位,大约可以表示42亿台计算机,但是随着电子产品的增多,IP4分配的地址明显是不够的,那么我们就需要一种能分配更多地址的方式,那就是IP6。

IP6有16字节,128位,号称可以为地球的每一粒沙子命名。

如果想要知道自己电脑的IP地址,可以Win+R打开黑窗口,输入ipconfig就可以查看自己电脑的IP4和IP6地址(一些新的设备没有IP4地址)。

2.2 端口

如果说IP地址是计算机的标识,那么端口号就是应用程序的标识,没有端口号,两台计算机之间也不能实现网络通信。

端口分类:

公认端口:0~1023。被预先定义的服务通信占用(如:HTTP占用端口80,FTP占用端口21,Telnet占用端口23)
注册端口:1024~49151。分配给用户进程或应用程序。(如:Tomcat占用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。(我们后面开发的程序可以使用这个范围的端口号)
动态/私有端口:49152~65535。
端口号与IP地址的组合得出一个网络套接字:Socket。

2.3 协议

网络通信协议是一组规则和约定,用于在计算机网络中进行通信和数据交换。这些协议定义了数据如何在网络中传输、路由和处理。常见的网络通信协议包括:

  1. TCP(传输控制协议):提供可靠的、面向连接的通信服务,确保数据的顺序传输和不丢失。常用于需要可靠数据传输的应用,如网页浏览、文件传输等。

  2. UDP(用户数据报协议):提供无连接的通信服务,数据传输不可靠,不保证数据的顺序和完整性。常用于实时应用,如音视频传输、在线游戏等。

  3. IP(互联网协议):定义了计算机在网络上的唯一标识(IP地址),以及数据包的格式和路由规则。IPv4和IPv6是目前广泛使用的两个版本。

  4. HTTP(超文本传输协议):用于在客户端和服务器之间传输超文本文档,是万维网的核心协议。通过HTTP,用户可以访问网页、发送和接收电子邮件等。

  5. HTTPS(超文本传输安全协议):是HTTP的安全版本,通过SSL/TLS加密协议保护数据传输的安全性和完整性。

  6. FTP(文件传输协议):用于在网络上传输文件,支持文件上传、下载和管理。

  7. SMTP(简单邮件传输协议):用于在网络上传输电子邮件,定义了电子邮件的格式和传输规则。

  8. POP3(邮局协议第3版)IMAP(互联网消息访问协议):用于接收和管理电子邮件的协议,POP3将邮件下载到本地客户端,而IMAP在服务器上管理邮件,客户端只是远程访问邮件。

  9. DNS(域名系统):将域名映射到IP地址的分布式数据库系统,用于解析域名和进行网络寻址。

  10. ARP(地址解析协议):将IP地址解析为物理地址(MAC地址)的协议,用于在局域网中进行通信。

这些网络通信协议共同构成了计算机网络的基础,实现了各种应用和服务之间的通信和交互。

这里为我们着重讲UDP通信TCP通信

3.UDP

从上面图片我们可以看到,使用UDP通信时,不需要与向接收的一方提前建立联系,直接发送信息,信息是否传送到了,不能得知,如果接收信息的一方没在线,发送信息的一方仍然可以发送信息,所以信息是否安全发送不能保证,但是没有了事先的建立联系,通信效率也提高了不少。

实现UDP通信,主要使用到下面方法。

下面我们用代码实现一下。

用户端:

public class Client {public static void main(String[] args) {//1、创建客户端,发消息的人try {DatagramSocket socket =new DatagramSocket();//2、创建包含信息的包Scanner scan=new Scanner(System.in);while (true) {String msg=scan.nextLine();//输入字符串byte[] bytes=msg.getBytes();//转换成字节数组if("exit".equals(msg))//退出判断{socket.close();break;}//将信息包装DatagramPacket packet=new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);//发送信息包socket.send(packet);}} catch (Exception e) {//捕获异常throw new RuntimeException(e);}}
}

服务端:

public class Server {public static void main(String[] args) {try {//1。创建服务端对象DatagramSocket socket =new DatagramSocket(6666);//指定端口号//2,创建一个数据包对象,用于接受数据byte[] buffer =new byte[1024*64];DatagramPacket packet =new DatagramPacket(buffer,buffer.length);while (true) {//接收信息包socket.receive(packet);int len=packet.getLength();String s1=new String(buffer,0,len);System.out.println(s1);//打印信息}} catch (Exception e) {throw new RuntimeException(e);}}
}

4.TCP

发送信息:

接收信息:

下面我们用多线程实现一个服务端连接多个用户端,并且可以实现多发多收。

服务端:

package com.lenrn.tcp;import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;public class Server {public static void main(String[] args) throws Exception {//1.实例化一个serversocket对象ServerSocket serverSocket=new ServerSocket(6886);//2.等待客户端连接,程序暂停,等待客户端的连接请求System.out.println("服务端启动");while (true) {//多次与新用户连接Socket socket= serverSocket.accept();System.out.println("已经与"+socket.getRemoteSocketAddress()+"建立连接");//子线程new ServerReadThread(socket).start();}}
}class ServerReadThread extends Thread{private Socket socket;public ServerReadThread(Socket socket){this.socket=socket;}@Overridepublic void run() {try {//3.从socket对象中得到一个字节输入流、InputStream is = socket.getInputStream();//4.将低级的字节输入流包装成数据输入流DataInputStream dis=new DataInputStream(is);while (true){String rs= dis.readUTF();System.out.println(rs);}} catch (Exception e) {System.out.println(socket.getRemoteSocketAddress()+"下线了");}}
}

用户端:

用户端多开需要勾选选项。

勾选应用即可。

package com.lenrn.tcp;import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {//1.创建一个Socket对象,同时请求连接服务端Socket socket=new Socket("127.0.0.1",6886);//2.从socket管道中得到一个字节输出流OutputStream os=socket.getOutputStream();//3.将低级的字节输出流包装成数据输出流DataOutputStream dos=new DataOutputStream(os);//4.写数据出去Scanner scan=new Scanner(System.in);while (true) {String msg = socket.getRemoteSocketAddress().toString();msg+=": ";String k=scan.nextLine();msg+=k;if("exit".equals(k)){System.out.println("退出成功");dos.close();socket.close();break;}dos.writeUTF(msg);}}
}

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

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

相关文章

网络安全学习路线-超详细

零基础小白,到就业!入门到入土的网安学习路线! 在各大平台搜的网安学习路线都太粗略了。。。。看不下去了! 建议的学习顺序: 一、网络安全学习普法(心里有个数,要进去坐几年!&#x…

浅谈Java的synchronized 锁以及synchronized 的锁升级

在Java中,synchronized关键字用于实现线程间的同步,确保同一时刻只有一个线程能够访问被同步的代码块或方法。当一个线程获得synchronized锁定后,其他试图访问同一锁的线程将被阻塞,直到锁被释放。 synchronized锁有两种基本形式…

计算机系列之操作系统的系统

2、大话操作系统的启动 当按下开机键时,BIOS 就会开始执行 ​ BIOS 就是放在主板上 ROM 里面的一段程序。 ​ ROM Read Only Memory(只能读取的内存) ​ 所以 BIOS 在出厂的时候就可以直接写死在 ROM 里面。 ​ 每次开机的时候&#xff…

牛客网刷题 | BC51 及格分数

描述 KiKi想知道他的考试分数是否通过,请帮他判断。从键盘任意输入一个整数表示的分数,编程判断该分数是否在及格范围内,如果及格,即:分数大于等于60分,是输出“Pass”,否则,输出“…

12.哀家要长脑子了!

1.189. 轮转数组 - 力扣(LeetCode) ​ 方法一: 要注意这个k是可以大于0的,所以旋转数组的时候要一直保证是在1-n的范围内:%实现 把k个元素旋转放到前面,前面n-k个元素是向后移动的。 class Solution { …

【Leetcode每日一题】 动态规划 - 最小路径和(难度⭐⭐)(58)

1. 题目解析 题目链接:64. 最小路径和 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法思路梳理: 一、状态表示 在路径类问题中,状态表示通常有两种形式: 从 [i,…

【电控笔记2.2】电流回路+延迟效应

延迟效应的来源以及影响 数字控制系统的delay: 5.4节有介绍T0=0.5TS 低通滤波器的时间常数? 滤波器的传递函数与性能参数

【C/C++笔试练习】read函数、虚拟存储、用户态、线程特点、缺页处理、调度算法、进程优先级、锁的使用、创建进程、不用加减乘除做加法、三角形

文章目录 C/C笔试练习选择部分(1)read函数(2)虚拟存储(3)用户态(4)线程特点(5)缺页处理(6)调度算法(7)进程优先…

java-spring 图灵 04

在Spring框架中,可以使用org.springframework.core.io.support.ResourcePatternResolver接口的resolveBasePackage方法来将指定的基础包解析为用于包搜索路径的模式规范。 例如,如果基础包是com.example.app,则可以使用resolveBasePackage方法…

UE4_动画基础_不同骨骼的动画重定向步骤

学习笔记,仅供参考! 1、导入fbx外部资源,不包含动画,需要使用小白人动画资源。 2、打开Girl_Skeleton。发现骨骼数量不同,要想使用另一个骨骼的动画资源,需要进行不同骨骼的动画重定向。 3、打开小白人骨骼…

基于java+springboot+vue实现的智慧党建系统(文末源码+Lw+ppt)23-58

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统智慧党建管理采取了人工的管理方法,但这种管…

C语言中的结构体:从定义到传递

前言 结构体是C语言中一种重要的数据类型,它允许我们将不同类型的数据组合成一个整体,并以自定义的方式进行操作。通过结构体,我们可以更加灵活地管理和处理复杂的数据结构,从而提高程序的可读性和可维护性。本篇博客将从结构体的…