Java基础——网络编程(一)

初识网络编程

网络编程:在网络通信协议下,不同计算机上运行的程序,进行的数据传输

应用场景:即时通信、网游对战、金融证券、国际贸易、邮件……

BS架构的优缺点:

1、不需要开发客户端,只需要页面+服务端

2、用户不需要下载,打开浏览器就能使用

3、如果应用过大,用户体验收到影响

CS架构的优缺点:

1、画面可以非常精美,用户体验好

2、需要开发客户端,也需要开发服务端

3、用户需要下载和更新的时候太麻烦

网络编程三要素

1、IP

设备在网络中的地址,是唯一的标识

常见IP分类:IPV4、IPV6

局域网IP随着上网地点不同(路由器不同)而改变,而127.0.0.1一直表示本机IP,不会改变

InetAddress类

2、端口号

应用程序在设备中唯一的标识

自己通常使用1024以上的端口号,一个端口号只能被一个应用程序使用

3、协议

数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp

UDP协议

1、用户数据协议

2、UDP是面向无连接的通信协议

速度快,有大小限制一次最多发送64K,数据不安全易丢失

应用:网络会议、语音通话、在线视频

TCP协议

1、传输控制协议TCP

2、TCP协议是面向连接的通信协议

速度慢,没有大小限制,数据安全

应用:文字聊天、下载软件

 UDP通信程序

发送数据

1、创建发送端的DatagramSocket对象

2、数据打包

3、发送数据

4、释放资源

//发送数据
public class SendMessageDemo {
    public static void main(String[] args) throws IOException {
        //1.创建DatagramSocket对象(快递公司)
        //细节:
        //绑定端口,以后就通过这个端口往外发送
        //空参:所有可用的端口中随机一个进行使用
        //有参:指定端口号进形绑定
        DatagramSocket ds = new DatagramSocket();

        //2.打包数据
        String str = "你好啊";
        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");//目的地IP地址
        int port = 10086;//目的地端口

        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);

        //3.发送数据
        ds.send(dp);

        //4.释放资源
        ds.close();
    }
}

接收数据

//接收对象
//运行时先运行接收端,再运行发送端
public class ReceiveMessageDemo {
    public static void main(String[] args) throws IOException {
        //1.创建DatagramSocket对象(快递公司)
        //细节:
        //在接收的时候,一定要绑定端口
        //而且绑定的端口一定要跟发送的端口保持一致
        DatagramSocket ds = new DatagramSocket(10086);

        //2.接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        //receive方法是阻塞的,程序执行到这一步时,会在这里死等,等发送端发送消息
        ds.receive(dp);

        //3.解析数据包
        byte[] data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();//从哪个IP发过来的
        int port = dp.getPort();//从哪个端口发过来的

        System.out.println("接收到的数据"+ new String(data,0,len));
        System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发出的");

        ds.close();
    }
}

三种通信方式

1、单播

以前的代码就是单播(一对一)

2、组播

组播地址:224.0.0~239.255.255.255,一个地址是一组电脑

其中224.0.0.0~224.0.0.255为预留的组播地址

3、广播

广播地址:255.255.255.255,对局域网内所有电脑通信

TCP通信程序

TCP通信协议是一种可靠的网络协议,它在通信的两端(客户端和服务器)各建立一个Socket对象。通信之前要保证连接已经建立。通过Socket产生IO流来进行网络通信

客户端(发送数据)

1、创建客户端的Socket对象(Socket)与指定服务端连接

Socket (String host,int port)

host为IP,port为端口

2、获取输出流,写数据

OutputStream getOutputStream()

3、释放资源

void close()

public class Client {
    //TCP协议,发送数据
    public static void main(String[] args) throws IOException {
        // 1.创建Socket对象
        //细节:在创建对象的同时会连接服务端,如果连不上,代码会报错
        Socket socket = new Socket("127.0.0.1", 10000);

        //2.可以从连接通道中获取输出流
        OutputStream os = socket.getOutputStream();

        //3.释放资源
        os.close();
        socket.close();
    }
}

服务端(接收数据)

1、创建服务器端的Socket对象(ServerSocket)

ServerSocket(int port)

2、监听客户端连接,返回一个Socket对象

Socket accept()

3、获取输入流,读数据,并把数据显示在控制台

InPutStream getInputStream()

4、释放资源

void close()

public class Server {
    public static void main(String[] args) throws IOException {
        //TCP协议,发送数据

        //1.创建对象SeverSocket
        ServerSocket ss = new ServerSocket(10000);

        //2.监听客户端的连接
        Socket socket = ss.accept();

        //3.从连接通道中获取输入流读取数据
        InputStream is = socket.getInputStream();
        int b;
        while ((b = is.read()) != -1) {
            System.out.println((char) b);
        }

        //4.释放资源】
        socket.close();
        ss.close();
    }
}

如果读取时中文乱码,用字符流读取即可

三次握手和四次挥手

三次握手

四次挥手

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 键空间迭代 Scan

引言 在平时线上Redis维护工作中,有时候需要从Redis实例成千上万的key中找出特定前缀的key列表来手动处理数据,可能是修改他的值,也可能是删除key。 Redis提供了一个简单暴力的指令keys用来列出所有满足特定正则字符串规则的key。 127.0.0…

26.1 WEB框架介绍

1. Web应用程序 1.1 应用程序有两种模式 应用程序的架构模式主要分为两种: C/S (客户端/服务器端)和B/S(浏览器/服务器端). * 1. C/S模式, 即客户端/服务器模式(Client/Server Model): 是一种分布式计算模式.它将应用程序的功能划分为客户端和服务器端两部分.在这种模式下, 客…

几种经典排序算法

几种经典排序算法 插入排序折半插入排序法 选择排序冒泡排序希尔排序堆排序二路归并排序快速排序 在介绍排序之前,先来说说,研究不同的排序主要是要研究他们的哪些不同: 时间性能。即排序过程中元素之间的比较次数与元素移动次数。我们此次讨…

【最新鸿蒙应用开发】——鸿蒙中的“Slot插槽”?@BuilderParam

构建函数-BuilderParam 传递 UI 1. 引言 BuilderParam 该装饰器用于声明任意UI描述的一个元素,类似slot占位符。 简而言之:就是自定义组件允许外部传递 UI Entry Component struct Index {build() {Column({ space: 15 }) {SonCom() {// 直接传递进来…

IPv6 ND 协议功能概述

ND 协议功能概述 ND(Neighbor Discovery,邻居发现)协议是 IPv6 的一个关键协议,它综合了 IPv4 中的 ARP,ICMP 路由发现和 ICMP 重定向等协议,并对它们做了改进。 作为 IPv6 的基础性协议,ND 协…

ppt添加圆角矩形,并调整圆角弧度方法

一、背景 我们看的论文,许多好看的图都是用PPT做的,下面介绍用ppt添加圆角矩形,并调整圆角弧度方法。 二、ppt添加圆角矩形,并调整圆角弧度 添加矩形: 在顶部工具栏中,点击“插入”选项卡。 在“插图”…

冒泡排序知识点

排序的基本概念 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录调整为“有序”的记录序列。 常用的排序例子 8 7 1 5 4 2 6 3 9 把上面的这个无序序列变为有序(升序或者降序)序列的过程。 1 2 3 4 5 6 7 8 9&#xff0…

Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求

测试表现层的代码如何测试 加载测试的专用属性 首先写一个测试 假定我们进行测试的时候要加一些属性 要去修改一些属性 我们可以写一个只在本测试有效的测试 写在配置里 测试 打印输出 我们把配置文件里面的配置注释掉后 我们同样可以启动 package com.example.demo;impo…

代码随想录——组合总和Ⅱ(Leetcode 40)需要回顾

题目链接 回溯 本题的难点在于:集合(数组candidates)有重复元素,但还不能有重复的组合。 思想:元素在同一个组合内是可以重复的,怎么重复都没事,但两个组合不能相同。所以要去重的是同一树…

购物车店铺列表查询流程

购物车店铺列表查询流程 购物车结算流程图

嵌入式门槛高不高,工资怎么样?

一般来说,嵌入式岗位的准入门槛其实并不是特别高。通常情况下,只要能够熟练掌握 C 语言编程以及单片机相关知识,就能够去制作一些较为简单的电子产品,由此可见其门槛相对而言是比较低的,相应的薪水可能也不会特别高。 …

I2C 总线通信技术基础

1.0 I2C 技术基础 使用总线的目的:采用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高,同时,系统的更改和扩充变的极为容易。 通信中常用的串行拓展总线 I2C(Inter-Integrated Circuit )总线…

C语言程序设计-6 循环控制

C语言程序设计-6 循环控制 循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序 段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语 言提供了多种循环语句&a…

计算机网络知识点全面总结回顾

物理层 OSI模型:数据链路层(流量控制),从传输层开始端到端;每一层的元素都称为实体,同一层的是对等实体;三个重要概念:服务(下层为上层提供调用)&#xff0c…

【Linux】进程间通信1——管道概念,匿名管道

1.进程间通信介绍 进程是计算机系统分配资源的最小单位(严格说来是线程)。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。 进程间通信,顾名…

1055 集体照(测试点3, 4, 5)

solution 从后排开始输出,可以先把所有的学生进行排序(身高降序,名字升序),再按照每排的人数找到中间位置依次左右各一个进行排列测试点3, 4, 5:k是小于10的正整数,则每…

记录一次root过程

设备: Redmi k40s 第一步, 解锁BL(会重置手机系统!!!所有数据都会没有!!!) 由于更新了澎湃OS系统, 解锁BL很麻烦, 需要社区5级以上还要答题。 但是,这个手机…

人工智能历史与现状

1 人工智能历史与现状 1.1 人工智能的概念和起源 1.1.1 人工智能的概念 人工智能 (Artificial Intelligence ,AI)是一门研究如何使计算机 能够模拟人类智能行为的科学和技术,目标在于开发能够感知、理解、 学习、推理、决策和解决问题的智能机器。人工智能的概念主要包含 以…

理解DDD设计

DDD的理解 领域驱动设计(Domain-Driven Design,DDD)是一种软件开发方法论,强调将业务领域作为软件设计的核心,以便更好地满足业务需求。DDD认为,软件开发的核心是理解业务,而不是实现技术。在D…

容器镜像外网同步方案

目录 一、目的 二、安装nexus 1、购买香港云主机​编辑 2、安装nexus 3、启动nexus 服务 4、放行安全组 三、配置nexus 1、登录nexus管理页面 2、修改nexus密码 3、创建 Blob 存储空间(可选) 4、创建 镜像代理仓库 5、Realms配置 四、拉取镜像 1、配置docker 2、…