day15_java的网络编程(简述)

news2024/11/25 10:41:55

计算机网络

一、什么是计算机网络

把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。

在这里插入图片描述

二、计算机网络主要功能

  • 资源共享

  • 信息传输与集中处理

  • 均衡负荷与分布处理

  • 综合信息服务 (www/综合业务数字网络 ISDN)

在这里插入图片描述

三、网络通过的三要素

  • ip地址

  • 端口号

  • 协议

1、IP地址

网络计算机的唯一标识

计算机底层只能识别二进制数据,所以我们的ip地址应该是一个二进制数据

  • 域名 = ip + 端口

  • 默认端口: 80

  1. 两个命令:

    **ping ip**地址/域名 //查看是否与指定的ip 连接通

    ipconfig : 查看本机的网络信息,包括有自己ip地址

  2. ip地址两类:

    • IPv4: 是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d 的形式,例如192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整数,那么最多可以表示42亿个。
    • **IPv6:**由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。

    为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。

  3. IP地址的组成 :

    网络号段 + 主机号段

  4. IP地址分类:

    IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。 全0和全1的都保留不用。

A类:(1.0.0.0-126.0.0.0)  (默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。
       
B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节 为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。 
      
       
C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个 字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。 
       
D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1] 。
       
E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。 

私有地址(不再互联网上使用,而是局域中使用):

  • 10.x.x.x

  • 192.168.x.x

  • 172.16.0.0 - 172.31.255.255

2、端口号

网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?

如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。

  • **端口号:用两个字节表示的整数,它的取值范围是065535**。其中,01023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。

利用协议+IP地址+端口号 三元组合,就可以标识网络中的进程了,那么进程间的通信就可以利用这个标识与其它进程进行交互。

网络默认端口:80

3、协议
OSI七层模型

在这里插入图片描述

传输层协议
  1. UDP

    UDP (User Datagram Protocol) : 用户数据报协议,用于传输层,作用: 发送IP 数据包

    特点:

    ​ 无连接,不安全(不可靠), 传输速度快

    在这里插入图片描述

  2. TCP( 三次握手,四次挥手)

    TCP(Transmission Control Protocol): 传输控制协议,用于传输层 , 和IP协议共同使用

    特点:

    ​ 面向连接, 可靠(安全性),字节流,传输较慢

    在这里插入图片描述

  3. 术语:

    ACK : 确认位

    • ACK = 1: 确认有效

    • ACK=0 : 确认无效

    SYN: 同步位 SYN = 1 表示进行连接请求

    FIN: FIN = 1 表示断开连接

    ack : 确认号, 值 为:对方发送的序列号+1

    seq: 序列号

在这里插入图片描述

在这里插入图片描述

四、Socket

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

Socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口

类型:

流式套接字、数据报套接字和原始套接字

Socket 原理

  1. 通信的两端都有Socket

  2. 网络之间的通信就是Socket间的通信

  3. 数据在两Socket间通过IO传输

五、UDP编程

InetAddress : java中提供的一个类,此类表示Internet协议(IP)地址。

键盘录入数据(可以替换Scanner): BufferedReader br = new BufferedReader (new InputstreamReader(system.in) );

在这里插入图片描述

udp发送

public class UDPSend {
    public static void main(String[] args) throws IOException {
        /*
         * UDP发送数据
            * 1.创建发送端的Socket
            * 2.创建数据,打包成数据报
            * 3.调用Socket中的发送方法
            * 4.释放资源
         * 
         */
        //1.创建发送端的Socket DatagramSocket(数据报套接字)
        DatagramSocket dgs = new DatagramSocket();
        Scanner sc = new Scanner(System.in);
         while (true){
             // 组包(数据报包)
             System.out.println("请输入你要发送的数据");
             String str = sc.next();
             if(str.equals("886")){
                 dgs.close();
                 break;
             }
             byte[] buf = str.getBytes();
             InetAddress address = InetAddress.getByName("localhost");
             // 本机   localhost   127.0.0.1
             //2.2.创建数据,打包成数据报
             DatagramPacket dp = new DatagramPacket(buf,0,buf.length, address,8888);
             //3.调用Socket中的发送方法
             dgs.send(dp);
         }
        //4.释放资源
       // dgs.close();
    }
}

udp接收

public class UDPRecive {
    public static void main(String[] args) throws IOException {
        /*
        * UDP接收数据
            1.创建接收端的socket
            2.创建─个数据报包(接收容器)
            * 3.调用socket接收方法
            4.解析数据,打印出来
            * 5.释放资源
        * */
        //1.创建接收端的socket
        DatagramSocket dgs = new DatagramSocket(8888);
        //2. 创建─个数据报包(接收容器)
        byte[] bytes = new byte[1024];
       while(true){
           DatagramPacket ds = new DatagramPacket(bytes,bytes.length);
           //3.调用socket接收方法
           dgs.receive(ds);
           //4.解析数据,打印出来
           // 解析发送过来的Ip地址
           InetAddress address = ds.getAddress();
           System.out.println("ip地址"+address.getHostAddress());
           System.out.println("主机名"+address.getHostName());

           //传的byte数据
           byte[] data = ds.getData();
           System.out.println(new String(data,0,ds.getLength()));
       }

        //释放资源
        //dgs.close();
    }
}

六、TCP编程

在这里插入图片描述

七、上传视频

客户端

package com.gxa.tcp;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

//上传文件的客户端
public class UploadClient {
	
	public static void main(String[] args) throws Exception, IOException {
		
		//1.创建Socket对象
		Socket socket=new Socket("127.0.0.1", 8080);
		
		
		//2.从磁盘读取数据到内存 in
	    //BufferedInputStream(InputStream in)  字节输入缓冲流
		BufferedInputStream in = new BufferedInputStream(new FileInputStream("C:\\Users\\gxa\\Desktop\\001.jpg"));
		
		
		//3.往服务器写出数据
		BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
		
		
		//4.流的模板代码
		byte[] buffer=new byte[1024];
		
		int len=0;
		
		while((len=in.read(buffer))>0) {
			out.write(buffer,0,len);
            out.flush(); //可能丢包
		}

		//5.传输文件,传输完毕,关闭输出流
		socket.shutdownOutput();
		
		
		//6.获取服务器反馈
	    InputStream ii = socket.getInputStream();
		
		byte[] bys=new byte[1024];
		
		int l=ii.read(bys);
		
		System.out.println(new String(bys, 0, l));
		
		
		in.close();
		
		socket.close();
	}

}

服务端

package com.gxa.tcp;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadServer {
	
	public static void main(String[] args) throws Exception {
		
		
		//1.创建ServerSocket对象
		ServerSocket serverSocket=new ServerSocket(8080);
		
		//2.获取到客户端Socket对象
		Socket socket = serverSocket.accept();
		
		//3.读取客户端的数据
		BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
		
		//4.往服务器磁盘写出数据
		BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("001.jpg"));
		
		
		//5.流的模板代码
	    byte[] buffer=new byte[1024];
		
		int len=0;
		
		while((len=in.read(buffer))>0) {
			out.write(buffer,0,len);
            out.flush();
		}

		//5.反馈服务器端已经上传成功!
		socket.getOutputStream().write("文件上传成功!".getBytes());
		
		out.close();
		socket.close();
		serverSocket.close();
    }
}

ileOutputStream(“001.jpg”));

	//5.流的模板代码
    byte[] buffer=new byte[1024];
	
	int len=0;
	
	while((len=in.read(buffer))>0) {
		out.write(buffer,0,len);
        out.flush();
	}

	//5.反馈服务器端已经上传成功!
	socket.getOutputStream().write("文件上传成功!".getBytes());
	
	out.close();
	socket.close();
	serverSocket.close();
}
}

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

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

相关文章

SpringBoot整合RocketMQ,高手都是这么玩的!

今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们,第三部分介绍如何封装RocketMQ以便更好地使用。 1. SpringBoo…

微信小程序、uniapp选择器,包含一级,二级级联,三级级联

效果预览: 已知问题: 不能与页面下拉一起使用 滑动选择后,scroll-view指定scrollTop时,scrollview滚动会有500ms左右的延迟(官方help),现在加了个loaing 参数说明: show(类型:Boolean,默认 false):控制组件显示隐藏 list(类型:Array):选择器绑定的数据 type(类型…

我的网站服务器被入侵了该怎么办?

最近有用户咨询到德迅云安全,说自己再用的网站服务器遇到了入侵情况,询问该怎么处理入侵问题,有什么安全方案可以解决服务器被入侵的问题。下面,我们就来简单讲下服务器遇到入侵了,该从哪方面入手处理,在预…

pandas 使用方法(1)

目录 1. excel 表格处理 (1) 读取excel 表格 (2) 抽取excel表部分列数据 (3) 保存数据到excel表格 (4) 保存到 excel 表中的不同sheet 2. 判断二维数组中的某个数值是否为空 3. 删除二维数组中的空行 4. 在列表中添加某列属性 本文是将使用pandas过程中遇到的问题进行了…

SpringDataJPA基础

简介 Spring Data为数据访问层提供了熟悉且一致的Spring编程模版,对于每种持久性存储,业务代码通常需要提供不同存储库提供对不同CURD持久化操作。Spring Data为这些持久性存储以及特定实现提供了通用的接口和模版。其目的是统一简化对不同类型持久性存储…

基于Java SSM框架实现个性化影片推荐系统项目【项目源码+论文说明】

基于java的SSM框架实现个性化影片推荐系统演示 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,个性化影片推荐系统当然也不能排除在外。个性化影片推荐系统是以实际运用…

【Citespace】从Citespace开始的引文可视化分析

CiteSpace 译“引文空间”,是一款着眼于分析科学分析中蕴含的潜在知识,是在科学计量学、数据可视化背景下逐渐发展起来的引文可视化分析软件。由于是通过可视化的手段来呈现科学知识的结构、规律和分布情况,因此也将通过此类方法分析得到的可…

经典目标检测YOLO系列(一)引言_目标检测架构

经典目标检测YOLO系列(一)引言_目标检测架构 一个常见的目标检测网络,其本身往往可以分为一下三大块: Backbone network,即主干网络,是目标检测网络最为核心的部分,backbone选择的好坏,对检测性能影响是十…

Jol-分析Java对象的内存布局

Jol-分析Java对象的内存布局 Open JDK提供的JOL(Java Object Layout)工具为我们方便分析、了解一个Java对象在内存当中的具体布局情况。本文实验环境为64位HotSpot虚拟机。 Java对象的内存布局 Java的实例对象、数组对象在内存中的组成包括:对象头、实例数据和内存…

一键优化工具,十分不错的win7、win10系统优化的工具,可以帮助用户轻松快速优化系统,供大家学习研究参考~

主要功能 01、禁用索引服务 02、禁止window发送错误报告 03、禁用"最近使用的项目” 04、关闭Windows Defender 05、关闭防火墙 06、检查更新而不自动下载更新 07、启动电源计划“高性能” 08、调整电源选项 09、禁用休眠(删除休眠文件) 10、开启快速启动 11、…

【lesson3】数据库表的操作

文章目录 创建修改修改表名增加表类型修改表的某一类型的类型修改表某一类型的类型名 删除删除表的某一列删除表 查看查看表信息查看表内容 创建 建表指令: 查看是否建表成功: 查看表的具体信息: 修改 修改表名 法一:修改…

yolov5目标检测

一、安装 1.源码下载 git clone git://github.com/ultralytics/yolov5.git cd yolov5 2.环境配置 conda create -n yolov5 python3.8 conda activate yolov5 nvcc -V查看cuda版本 pytorch官网下载对应版本,例如当cuda版本为11.6 pip install torch1.13.1cu…

阿里云服务器租用价格分享,阿里云服务器热门配置最新活动价格汇总

在我们购买阿里云服务器的时候,1核2G、2核2G、2核4G、2核8G、4核8G、8核16G、8核32G等配置属于用户购买最多的热门配置,1核2G、2核2G、2核4G这些配置低一点的云服务器基本上能够满足绝大部分个人建站和普通企业用户建站需求,而4核8G、8核16G、…

Vue之模板语法

模板语法有两大类&#xff1a; 1.插值语法 2.指令语法 让我为大家介绍一下吧&#xff01; 一、插值语法 功能:用于解析标签体内容。 写法: {{xxx}}&#xff0c;xxx是js表达式&#xff0c;且可以直接读取到data中的所有属性。 举个例子&#xff1a; <!DOCTYPE html> &l…

六级高频词汇3

目录 单词 参考链接 单词 400. nonsense n. 胡说&#xff0c;冒失的行动 401. nuclear a. 核子的&#xff0c;核能的 402. nucleus n. 核 403. retail n. /v. /ad. 零售 404. retain vt. 保留&#xff0c;保持 405. restrict vt. 限制&#xff0c;约束 406. sponsor n. …

LinuxBasicsForHackers笔记 -- BASH 脚本

你的第一个脚本&#xff1a;“你好&#xff0c;黑客崛起&#xff01;” 首先&#xff0c;您需要告诉操作系统您要为脚本使用哪个解释器。 为此&#xff0c;请输入 shebang&#xff0c;它是井号和感叹号的组合&#xff0c;如下所示&#xff1a;#! 然后&#xff0c;在 shebang …

“我“的测试之路,从初级测试到测试开发,往后前景...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试工程师的现…

C++ //习题2.5 请写出下列表达式的值。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 习题2.5 习题2.5 请写出下列表达式的值。 (1) 3.5 * 3 2 * 7 - ‘a’ (2) 26 / 3 34 % 3 2.5 (3) 45 / 2 (int)3.14159 / 2 (4) a b (c a 6) 设a的初值为3 (5) a 3 * 5, a b 3 * 2 (6) (int)(a 6.5) % 2 …

DevEco Studio 3.1IDE环境配置(HarmonyOS 3.1)

DevEco Studio 3.1IDE环境配置&#xff08;HarmonyOS 3.1&#xff09; 一、安装环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、环境安装 IDE下载地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 IDE的安装就是…

家具制造ERP软件包含哪些功能?家具制造业ERP系统哪个好

不同的家具有不同的用料、品质、制造工时、营销渠道等&#xff0c;而有些家具制造企业采用传统的管理方式在处理物料BOM、生产实际成本核算、库存盘点、供应商选择、班组计件核对、生产领用以及物料追溯等方面存在不少提升空间。 与此同时也有很多的皮具制造企业借助ERP软件优…