IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络编程个人学习笔记 -> 正文阅读

[网络协议]网络编程个人学习笔记

目录

1.概述

计算机网络:

2.网络通信的要素

3.IP

4.端口

5.通信协议

6.TCP

1.聊天实现

2.文件上传实现

Tomcat

7.UDP

发送消息

接收端

循环发送消息

8.URL


1.概述

计算机网络:

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程的目的: 无线电台。。传播交流信息,数据交换。通信

想要达到这个效果需要什么: 1. 如何准确的定位网络上的一台主机 192.168.16.124 :端口,定位到这个计算机的某个资源 2. 找到这个主机, 如何传输数据呢?

Javaweb : 网络编程 B/S 网络编程 : TCP/IP C/S

2.网络通信的要素

如何实现网络的通信? 通信双方地址:

  • IP

  • 端口号

  • 192.168.16.124:5000 规则: 网络通信的协议 TCP

img

小结:

  1. 网络编程中有两个主要的问题

  • 如何准确的定位到网络上的一台或多台主机

  • 找到主机之后如何进行通信

  1. 网络编程中的要素

  • Ip和端口号 Ip.

    • 网络通信协议 udp , tcp

  1. 万物皆对象

3.IP

ip地址: InetAddress

  • 唯一定位一台网络上的计算机

  • 127.0.0.1 : 本机localhost

  • ip地址的分类

    • ipv4 / ipv6

      • Ipv4 127.0.0.1 ,4个字节组成. 0~255 ; 30亿都在北美 , 亚洲4亿; 2011年就用尽了;

      • IPV6 fe80::5de2:90fc:c0b4:38ea%14 , 128位; 8个无符号整数 !

      • ?2001: 0bb2: bbbb: 0251: 0000: 0000: laaa: 1312
    • 公网(互联网) - 私网 (局域网)

      • 192.168.xx.xx ,专门给组织内部使用的

  • 域名: 记忆IP问题 !

4.端口

端口表示计算机的一个程序的进程;

  • 不同的进程有不同的端口号! 用来区分软件!

  • 被规定 0~65535

  • TCP,UDP : 65535*2 tcp: 80 , udp: 80吗, 单个协议下,端口号不能冲突

  • 端口分类

    • 公有端口 0~1023

      • HTTP: 80

      • HTTPS: 443

      • FTP: 21

      • Telent: 23

    • 程序注册端口: 1014~49151, 分配用户或者程序

      • tomcat : 8080

      • Mysql : 3306

      • Oracle : 1521

    • 动态 \ 私有:49152~65535

    ?netstat -ano ?#查看所有的端口
    ?netstat -ano |findstr "5900" #查看指定的端口
    ?tasklist|findstr "8696" ? #查看指定端口的进程
    ?Ctrl+ Shift +Esc ?#打开任务管理器

5.通信协议

协议: 约定,就好比我们现在说的是普通话。

网络通信协议: 速率 ,传输码率 , 代码结构 ,传输控制。。。。

问题: 非常复杂?

大事化小: 分层!

TCP、IP协议簇

重要:

  • TCP: 用户传输协议

  • UDP:用户数据报协议

出名的协议:实际上是一组协议

  • TCP:

  • IP:网络互联协议

TCP UDP 对比

TCP:打电话

  • 连接,稳定

  • '三次握手' '四次挥手'

    • ?最少需要三次,确保稳定连接
      ?A: 你愁啥?
      ?B: 瞅你咋地?
      ?A: 干一场!
      ??
      ??
      ??
      ?A: 我要走了!
      ?B: 你真的要走了吗?
      ?B: 你真的真的要走了吗?
      ?A: 我真的要走了!
  • 客户端 、服务端

  • 传输完成, 释放连接 ,效率低

UDP:发短信

  • 不连接 , 不稳定

  • 客户端、 服务端: 没有明确的界限

  • 不管有没有准备好, 都可以发给你

  • 导弹

  • DDOS: 洪水攻击! (饱和攻击)

6.TCP

1.聊天实现

客户端

  1. 连接服务器 Socket

  2. 发送消息

//客户端
?public class TcpClientDemo01 {
? ? ?public static void main(String[] args) {
? ? ? ? ?Socket socket = null;
? ? ? ? ?OutputStream os = null;
? ? ? ? ?try {
? ? ? ? ? ? ?//1.要知道服务器的地址,端口号
? ? ? ? ? ? ?InetAddress serverIP = InetAddress.getByName("127.0.0.1");
? ? ? ? ? ? ?int port=9999;
? ? ? ? ? ? ?//2. 创建一个socket连接
? ? ? ? ? ? ?socket = new Socket(serverIP, port);
? ? ? ? ? ? ?//3.发送消息 IO流
? ? ? ? ? ? ?os = socket.getOutputStream();
? ? ? ? ? ? ?os.write("你好,欢迎学习Java".getBytes(StandardCharsets.UTF_8));
??
??
? ? ? ?  } catch (Exception e) {
? ? ? ? ? ? ?e.printStackTrace();
??
? ?  }finally {
? ? ? ? ? ? ?if (os!=null){
? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ?socket.close();
? ? ? ? ? ? ? ?  } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?  }
? ? ? ? ? ? ? ? ?if (socket!=null){
? ? ? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ? ? ?socket.close();
? ? ? ? ? ? ? ? ? ?  } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ? ? ?  }
? ? ? ? ? ? ? ?  }
? ? ? ? ? ?  }
? ? ? ?  }
?}}

服务器

  1. 建立服务的端口 ServerSocket

  2. 等待用户的链接 accept

  3. 接收用的消息

?//服务端
?public class TcpServerDemo01 {
? ? ?public static void main(String[] args) {
? ? ? ? ?//提升作用域
? ? ? ? ?ServerSocket serverSocket = null;
? ? ? ? ?Socket socket = null;
? ? ? ? ?InputStream is = null;
? ? ? ? ?ByteArrayOutputStream baos = null;
??
? ? ? ? ?try {
? ? ? ? ? ? ?//1. 我得有一个地址
? ? ? ? ? ? ?serverSocket = new ServerSocket(9999);
? ? ? ? ? ? ?//2.等待客户端连接过来
? ? ? ? ? ? ?socket = serverSocket.accept();
? ? ? ? ? ? ?//3.读取客户端的消息
? ? ? ? ? ? ?is = socket.getInputStream();
??
? ? ? ? ? ? ?//管道流
? ? ? ? ? ? ?baos = new ByteArrayOutputStream();
? ? ? ? ? ? ?byte[] buffer = new byte[1024];
? ? ? ? ? ? ?int len;
? ? ? ? ? ? ?while ((len= is.read(buffer))!=-1){
? ? ? ? ? ? ? ? ?baos.write(buffer,0,len);
? ? ? ? ? ?  }
? ? ? ? ? ? ?System.out.println(baos.toString());
??
??
??
? ? ? ?  } catch (Exception e) {
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ?  }finally {
? ? ? ? ? ? ?//关闭资源
? ? ? ? ? ? ?if (baos!= null){
? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ?baos.close();
? ? ? ? ? ? ? ?  } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?  }
? ? ? ? ? ?  }
? ? ? ? ? ? ?if (is!= null){
? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ?is.close();
? ? ? ? ? ? ? ?  } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?  }
? ? ? ? ? ?  }
? ? ? ? ? ? ?if (socket!= null){
? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ?socket.close();
? ? ? ? ? ? ? ?  } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?  }
? ? ? ? ? ?  }
? ? ? ? ? ? ?if (serverSocket!= null){
? ? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ? ?serverSocket.close();
? ? ? ? ? ? ? ?  } catch (IOException e) {
? ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?  }
? ? ? ? ? ?  }
??
? ? ? ?  }
??
? ?  }
?}

2.文件上传实现

客户端

?public class TcpClientDemo02 {
? ? ?public static void main(String[] args) throws Exception {
? ? ? ? ?//1.创建一个Socket连接
? ? ? ? ?Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
??
? ? ? ? ?//2.创建一个输出流
? ? ? ? ?OutputStream os = socket.getOutputStream();
??
? ? ? ? ?//3.读取文件
? ? ? ? ?File f = new File("D:\\zoo\\Gitee\\网络编程\\you\\logo.jpg");
? ? ? ? ?FileInputStream fis = new FileInputStream(f);
??
? ? ? ? ?//4.写出文件
? ? ? ? ?byte[] buffer = new byte[1024];
? ? ? ? ?int len;
? ? ? ? ?while ((len=fis.read(buffer))!=-1){
? ? ? ? ? ? ?os.write(buffer,0,len);
? ? ? ?  }
??
? ? ? ? ?//5. 关闭资源
? ? ? ? ?fis.close();
? ? ? ? ?os.close();
? ? ? ? ?socket.close();
??
??
? ?  }
?}

服务器

?public class TcpServerDemo02 {
? ? ?public static void main(String[] args) throws Exception {
??
??
? ? ?//1.创建服务
? ? ?ServerSocket serverSocket = new ServerSocket(9000);
??
? ? ?//2.监听客户端的连接
? ? ? ? ?Socket socket = serverSocket.accept(); //阻塞式监听, 会一直等待客户端连接
??
? ? ?//3.获取输出流
? ? ? ? ?InputStream is = socket.getInputStream();
??
? ? ?//4.文件输出
? ? ? ? ?File f = new File("D:\\zoo\\Gitee\\网络编程\\you\\receive.jpg");
? ? ? ? ?FileOutputStream fos = new FileOutputStream(f);
? ? ? ? ?byte[] buffer = new byte[1024];
? ? ? ? ?int len;
? ? ? ? ?while ((len=is.read(buffer))!=-1){
? ? ? ? ? ? ?fos.write(buffer,0,len);
? ? ? ?  }
??
? ? ? ? ?//关闭资源
? ? ? ? ?fos.close();
? ? ? ? ?is.close();
? ? ? ? ?socket.close();
? ? ? ? ?serverSocket.close();
??
? ?  }
?}

Tomcat

服务端

  • 自定义 s

  • Tomcat服务器 S : Java后端开发

客户端

  • 自定义 c

  • 浏览器 b

7.UDP

发短信: 不用连接, 需要知道对方的地址!

发送消息

(客户端)

?//不需要连接服务器
?public class UdpClientDemo01 {
? ? ?public static void main(String[] args) throws Exception {
? ? ? ? ?//1.建立一个Socket
? ? ? ? ?DatagramSocket socket = new DatagramSocket(8080);
??
? ? ? ? ?//2.建个包
? ? ? ? ?String msg = "你好,服务器 !";
? ? ? ? ?InetAddress localhost = InetAddress.getByName("localhost");
? ? ? ? ?int port = 9090;
??
? ? ? ? ?//数据, 数据的长度起始, 要发送给谁
? ? ? ? ?DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
??
? ? ? ? ?//3.发送包
? ? ? ? ?socket.send(packet);
??
? ? ? ? ?//关闭流
? ? ? ? ?socket.close();
??
? ?  }
?}

接收端

?//还是要等待客户端的链接 !
?public class UdpServerDemo01 {
? ? ?public static void main(String[] args) throws Exception {
? ? ? ? ?//开放端口
? ? ? ? ?DatagramSocket socket = new DatagramSocket(9090);
??
? ? ? ? ?//接受数据包
? ? ? ? ?byte[] buffer = new byte[1024];
? ? ? ? ?DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
??
? ? ? ? ?socket.receive(packet);//阻塞接收
??
? ? ? ? ?System.out.println(packet.getAddress().getHostAddress());
? ? ? ? ?System.out.println(
? ? ? ? ? ? ? ? ?new String(
? ? ? ? ? ? ? ? ? ? ? ? ?packet.getData(), 0, packet.getLength()));
??
? ? ? ? ?//关闭连接
? ? ? ? ?socket.close();
??
??
? ?  }
?}

循环发送消息

?
public class UdpSenderDemo01 {
? ? ?public static void main(String[] args) throws Exception {
? ? ? ? ?DatagramSocket socket =
? ? ? ? ? ? ? ? ?new DatagramSocket(8888);
??
? ? ? ? ?//准备数据: 控制台读取 System.in
??
? ? ? ? ?BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
??
? ? ? ? ?while (true) {
? ? ? ? ? ? ?String data = reader.readLine();
? ? ? ? ? ? ?byte[] datas = data.getBytes();
? ? ? ? ? ? ?DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));
??
? ? ? ? ? ? ?socket.send(packet);
? ? ? ? ? ? ?if (data.equals("bye")) {
? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ?  }
? ? ? ?  }
??
? ? ? ? ?socket.close();
??
? ?  }
?}

?
public class UdpReceiveDemo01 {
? ? ?public static void main(String[] args) throws Exception {
? ? ? ? ?DatagramSocket socket = new DatagramSocket(6666);
??
??
? ? ? ? ?while (true){
??
? ? ? ? ? ? ?//准备接收数据
? ? ? ? ? ? ?byte[] container = new byte[1024];
? ? ? ? ? ? ?DatagramPacket ?packet = new DatagramPacket(container, 0, container.length);
? ? ? ? ? ? ?socket.receive(packet);//阻塞式接收包裹
??
? ? ? ? ? ? ?//断开连接 bye
? ? ? ? ? ? ?byte[] data = packet.getData();
? ? ? ? ? ? ?String receiveData = new String(data, 0, data.length);
? ? ? ? ? ? ?System.out.println(receiveData);
? ? ? ? ? ? ?if (receiveData.equals("bye")){
? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ?  }
??
? ? ? ?  }
? ? ? ? ?socket.close();
??
??
? ?  }
?}

在线咨询 : 两个人都可以是发送方也可以是接受方

8.URL

百度一下,你就知道

统一资源定位符: 定位资源的, 定位互联网上的某一个资源

DNS 域名解析 百度一下,你就知道 180.101.49.11

?协议: //ip地址: 端口/项目名/资源

?public class URLDemo01 {
? ? ?public static void main(String[] args) throws MalformedURLException {
? ? ? ? ?URL url = new URL("http://localhost:8080/");
? ? ? ? ?System.out.println(url.getProtocol()); // 协议
? ? ? ? ?System.out.println(url.getHost()); ? ? // 主机IP
? ? ? ? ?System.out.println(url.getPort()); ? ? // 端口
? ? ? ? ?System.out.println(url.getPath()); ? ? // 文件
? ? ? ? ?System.out.println(url.getFile()); ? ? // 全路径
? ? ? ? ?System.out.println(url.getQuery()); ? ?//参数
??
? ?  }
?}
??
?public class URLDown {
? ? ?public static void main(String[] args) throws Exception{
? ? ? ? ?//1. 下载地址
? ? ? ? ?URL url = new URL("地址值");
? ? ? ? ?//2. 连接到这个资源  HTTP
? ? ? ? ?HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
??
? ? ? ? ?InputStream inputStream = urlConnection.getInputStream();
??
? ? ? ? ?FileOutputStream fos = new FileOutputStream("项目名");
??
? ? ? ? ?byte[] buffer = new byte[1024];
? ? ? ? ?int len;
? ? ? ? ?while ((len=inputStream.read())!=-1){
? ? ? ? ? ? ?fos.write(buffer, 0, buffer.length); // 写出这个数据
? ? ? ?  }
??
? ? ? ? ?fos.close();
? ? ? ? ?inputStream.close();
? ? ? ? ?urlConnection.disconnect();// 断开连接
? ?  }
?}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:09:53  更:2021-10-04 13:10:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/29 20:09:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码