【Java高级特性】java学习之旅36-网络编程

2020年Java讲课笔记目录 1、Java讲课笔记01:搭建Java开发环境 2、Java讲课笔记02:Java集成开发环境 3、Java讲课笔记03:Java基本语法 阅读详情

网络通信协议:

  1. 应用层:
  • HTTP:超文本传输协议
  • FTP:文本传输协议
  • SMTP: 邮件发送协议
  • POP: 邮件接收协议
  1. 传输层:

TCP:传输控制协议(三次握手)
UDP: 用户数据包协议

  1. 网络层
  • IP: 网络协议
  1. 数据链路层
  2. 物理层

IP:

  1. 网络地址:唯一标识网络上的每一台计算机
  2. 地址组成:32位,由4个8位二进制数组成。
  3. 本地ip的表现形式:
  1. 127.0.0.1
  2. localhost
  3. 局域网ip(可以使用ipconfig指令查询)
  4. 广域网ip(百度直接搜索ip)
  1. 常用的指令:
  1. ipconfig: 查看本机所有网络的配置
  2. ping: 可以测试网络是否通畅,可以查看域名映射的ip

DNS:

  1. Domain Name System, 域名解析系统
  2. DNS是一个分布式服务器系统,实现了域名和ip地址的隐射
  3. 我们请求域名(www.baidu.com),会先进行DNS的解析,得到ip地址后,继续请求ip地址对应的主机。

java.net包下的类

1. URL类:

url:统一资源定位符,例如:http://www.longge.vip//study/javacore.avi;

分析:协议://域名(ip)/资源路径/资源名

  1. 构造方法
URL url = new URL("http://www.longge.vip/study.java");
System.out.println(url);
  1. encode(),将网站中的中文字符加密
String encodeStr = URLEncoder.encode("http://www.longge.vip/study","utf-8");
  1. 将网址中的乱码解码 decode();
String decoderStr = URLDecoder.decode(emcoderStr,"utd-8")
  1. 查看本机的ip
InetAddress localHost = InetAddress.getLocalHost();
  1. 查看域名映射的ip
InetAddress ip1 = InetAddress.getByName("www.baidu.com");
  1. 查看域名映射的所有ip
InetAddress[] ips = InetAddress.getAllByName("www.taovao.com");
  1. 通过ip地址创建对象
InetAddress ip2 = InetAddress.getByAddress(new byte[] {(byte)192, (byte)168, 1, (byte)172});

实现网络编程:

  • TCP + Socket实现网络编程
  • UDP + Socket实现网络编程
TCPUDP
面向连接的面向非连接
是安全的是不安全的
比较慢比较快
适合传输大文件适合传输小文件

注意:
输出流关闭造成的Socket关闭

  1. 再客户端或者服务端通过socket.shutdownOutput()都是单项关闭的,即关闭客户端的输出流并不会关闭服务端的输出流,所以是一种单方向的关闭流
  2. 通过socket.shutdownOutput()关闭输出流,但socket任然是连接状态,连接并未关闭
  3. 如果直接关闭输入流或者输出流,即:in.close()或者out.close().会直接关闭socket

TCP + Socket 网络编程:

//TCP client
private static Scanner sc = new Scanner(System.in);

public stataic void main(Stringp[[ args) throes Exception{
    
    //1. 创建Socket对象,指定主机地址和端口号
    Socket client = new Socket("localhost" , 1904);
    System.out.println("客户端启动完毕!");
    
    //2.创建一个输出流用于发送数据给主机
    DataOuputStream dos = new DataOutputStream(client.getOutputStream());
    
    //3.发送数据
    dos.writeUTF(sc.next());
    
    //4. 创建一个输入流用于接收服务器发送的数据
    DataInputStream  dis = new DataInputStream(client.getInputStream());
    
    //5.接收服务器发送的请求
    String message = dis.readUTF();
    System.out.println(message);
}
//TCP server

//1.创建ServerSocket对象,指定端口号
ServerSocket server = new ServerSocket(1904);
System.out.println("服务器启动完毕");

//2. 监听客户端请求
Socket client = server.accept();
System.out.println("服务器监听到客户端连接!")

//3. 创建输入流用于接收客户端发送的数据
DataInputStream dis = new DataInputStream(client.getInputStream());

//4. 获取客户端发送的数据
String message = dis,readUTF();
System.out.println(message);

//5.创建输出流用于发送消息到客户端
DataOutputStream dos = new DataOutputStream(client.getOutputStream());

//6. 发送数据
dos.writeUTF("你好,我是服务器");

//7.关闭资源
dos.close();
dis.close();
client.close();
server.close();

UDP + Socket 实现网络编程:

//client1
public static void main(String[] args) throws IOException{
    
    //1. 创建DatagramSocket对象,指定端口号
    DatagramSocket client1 = new DatagramSocket(6666);
    
    //2. 创建DatagramPaclet对象,用于包装数据
    String message = "hello, 我是客户端1";
    DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, InetAddress.getByName("localhost"), 8888);
    
    //3. 发送打包好的数据
    client1.send(packet);
    
    //4. 关闭资源
    client1.close();
}
//client2
public static void main(String[] args) throws Exception{
    //1. 创建DatagramSocket对象
    DatagramSocket client2 = new DatagramSocket(8888);
    
    //2. 接收客户端1发来的请求
    byte[] buf = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buf, buf.length);
    client2.receive(packet);
    
    //3. 查看接收到的数据
    byte[] data =  packet.getData();
    System.out.println(new String(data);
    
    //关闭资源
    client2.close();
}

作业:
实现控制台群聊功能

Java专栏大纲 在“Java编程“专栏中,我们将探索Java编程语言的各个方面,从基础概念到高级技术,旨在帮助程序员们更好地理解和利用Java。无论您是刚刚入门Java编程还是经验丰富的开发人员,本专栏都将为您提供有价值的信息和技巧。 阅读详情

相关推荐

LabVIEW电压信号采集系统:从零搭建到科研实战

本文详细介绍了如何从零开始搭建一个基于LabVIEW的电压信号采集系统。内容涵盖硬件选型(如NI USB-6002数据采集卡)、软件环境配置、核心程序开发(包括多通道同步采集、数据自动保存)以及高级功能优化。系统支持自定义采样率与时长,并提供了完整的LabVIEW程序框图和配套的Python数据分析脚本,旨在帮助科研人员和工程师快速构建稳定、高效的专属数据采集方案,提升实验自动化水平。

gold8的专栏 460

Java中四种引用类型

阅读本文大概需要3.8分钟 欢迎大家关注我的公众号:神兽学编程 1、前言 在Java中提供了四个级别的引用:强引用,软引用,弱引用和虚引用。在这四个引用类型中,只有强引用FinalReference类是包内可见,其他三种引用类型均为public,可以在应用程序中直接使用。引用类型的类结构如图所示。 2、强引用 Java中默认声明的就是强引用,例如以下代码,如果M对象被回收了,会打印 finalize() 方法中的内容: public class Demo { ...

m0_37133390的博客 954

自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO

下面是一个关于自适应粒子群优化(Adaptive Particle Swarm Optimization,APSO)的博客,希望可以帮助您。提示:以下是本篇文章正文内容,下面案例可供参考在上面的代码中,表示粒子的数量,表示解空间的维度,表示迭代次数,表示优化的目标函数。在__init__方法中,我们初始化了粒子群的位置和速度,并将每个粒子的位置作为其最优解,将其适应度值初始化为正无穷。我们还初始化了学习因子和惯性权重的参数。在run方法中,我们迭代了次,计算每个粒子的适应度值和最优解。

weixin_52026057的博客 9913

Java 常用类(二)

Java 常用类: String 类 常用构造器: String():初始化一个新创建的 String 对象,使其表示一个空字符序列。 String str1=new String(); String(byte[] bytes):通过使用平台的默认字符集解码指定的 byte 数组,构造一个新 的 String。 byte[] bytes=new byte[] {-24,-65,-103,-26,-104,-81,-28,-72,-83,-26,-106,-121}; //默认UTF-8 String

weixin_44886816的博客 1555

ADS 使用教程(一)Workspace, Library and Cell

简要介绍ADS的基本内容

Dirge19的博客 6610

AT91SAM9260搭建LINUX操作系统

一、 编写目的 2 二、 系统搭建 2 1. 下载相关软件包 2 2. Bootstrap编译 3 3. U-BOOT编译 5 4. LINUX编译 7 5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像 9 6. 文件系统制作 10 7. 挂载NFS作为根文件系统 10 三、 总结 14 一、编写目的 本文档用于记录AT91SAM9260 LINUX学

lshiceman的专栏 7412

字节缓冲流复制

字节缓冲流复制 案例需求 把“E:\itcast\字节流复制图片.avi”复制到模块目录下的“字节流复制图片.avi” 实现步骤 根据数据源创建字节输入流对象 根据目的地创建字节输出流对象 读写数据,复制视频 释放资源 代码实现 public class CopyAviDemo { public static void main(String[] args) throws IOException { //字节缓冲流一次读写一个字节 method1();

weixin_41291118的博客 372

【图像超分】论文精读:Residual Dense Network for Image Super-Resolution(RDN)

一个非常深的卷积神经网络 (CNN) 最近在图像分类 (SR) 方面取得了巨大成功,并提供了分层特征。然而,大多数基于深度 CNN 的 SR 模型没有充分利用原始低分辨率 (LR) 图像中的层次特征,从而实现相对较低的性能。在本文中,我们提出了一种新的残差密集网络(RDN)来解决图像SR中的这个问题。我们充分利用所有卷积层的分层特征。具体来说,我们提出了残差密集块(RDB)通过密集连接的卷积层提取丰富的局部特征。RDB 进一步允许将前一个 RDB 的状态与当前 RDB 的所有层直接连接,从而产生连续的内存

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7256

Java - IO流

1、IO流,什么是IO? I :Input ,O :Output 通过IO可以完成硬盘文件的读和写。 2、IO流的分类? 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input),或者叫做读(Read)。 从内存中出来,叫做输出(Output),或者叫做写(Write)。 另一种方式是按照读取数据方式不...

kihma的博客 596

《Scratch图形化等级考试(1~4级)历届真题解析》专栏总目录

❤️ 专栏名称:《🌸 专栏介绍:中国电子学会《全国青少年软件编程等级考试》Scratch图形化等级考试(1~4级)历届真题解析。🚀 订阅专栏:原价 99.9,🔥 火爆订阅中 🔥,限时 19.9。订阅后可阅读专栏内所有文章,本专栏持续更新中,欢迎订阅!

人生就是一个不断学习的过程 1万+

【RT-DETR有效改进】利用EMAttention加深网络深度提高模型特征提取能力(特征选择模块)

本文给大家带来的改进机制是EMAttention注意力机制,它的核心思想是,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中的通道权重,并通过跨维度交互来捕获像素级别的关系。本文改进是基于ResNet18、ResNet34、ResNet50、ResNet101,文章中均以提供,本专栏的改进内容全网独一份深度改进RT-DETR非那种无效Neck部分改进,

Snu77的博客 3169

JAVA之字节流和字符流

列,它与外部设备中的字节存在着一一对应的关系,不存在字符的转换,被读写字节的个数与外部设备。题目:用户在键盘依次输入若干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非。读取一系列字符并存储到一个数组中,返回实际读取的字符数,如果读到输入。如果源文件不存在,则显示相应的错误信息。如果源文件不存在,则显示相应的错误信息。刷新缓冲区,将缓冲区中的数据全部送出到目标地,然后清空缓冲区。读取一系列字节并存储到一个数组,返回实际读取的。型的参数对应要写入的字节,后两个方法的参数与。...

weixin_64771061的博客 1325

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

《Java语言高级特性(阿里云大学)》笔记 第35~38章 网络+数据库(文档+思维导图)

课程链接:https://edu.aliyun.com/course/1012 第1~6章 关于线程:https://blog.youkuaiyun.com/weixin_43494837/article/details/113764127?spm=1001.2014.3001.5501 第7~14章 类库+正则+国际化+比较器:https://blog.youkuaiyun.com/weixin_43494837/article/details/113764156?spm=1001.2014.3001.5501 第15~20章

Panda颜的博客 323

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java系列_汇总

汇总

魏宇轩 1600

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Java300集学习笔记与心得】序言-写给自己~

背景:应网友推荐,先观看完了慕课网免费的JAVA三季入门视频,感觉跳度太大。(本人基础太差,慕课网JAVA课程可作为有一定良好JAVA基础的同学可以作为补充、记忆去学习)以下Java300集目录。写给自己:自己将尽自己最大努力,学好JAVA。认真做每一分笔记~感谢尚学堂.高淇.JAVA300集。侵删~ 1_300集java课程介绍 2_计算机语言发展史_java历史_java核心优势_java三大...

Oliver_LJF的博客 1536

初级Java应届生面试题(持续更新。。。)

@TOC 1、JDK、jre、JVM三者的关系,以及JDK、JRE包含的主要结构有哪些 JDK=JRE+开发工具 JRE=常用类库+JVM 2.为什么要配置path环境变量?如何配置? PATH:我们希望在操作系统的任何目录下都运行java程序 环境变量 Why Function So PATH 因为Java的编译器和解释器都在JDK的lib目录下 path环境变量在Opera...

weixin_37838913的博客 6043

可能是最全的java架构师面试题

架构师必读 最全最新java面试题系列全家桶(带答案) 架构师职位常见面试题 源码分析 常用设计模式 23种经典设计模式都有哪些,如何分类 阿里java设计模式面试题 Spring 框架中都用到了哪些设计模式 开发中都用到了那些设计模式?用在什么场合? 微服务架构的六种常用设计模式是什么? 1、proxy代理模式 2、factory工厂模式 3、singleton单例模式 4、delegate委派...

jovisoft的专栏 2万+

MLDN出品JAVA风暴终极的java学习视频

MLDN出品JAVA风暴终极的java学习视频 按顺序讲解,非常细致,很不错的视频 Java介绍及JDK配置.wmv Java标识符号、关键字、类型.wmv Java标识符号、关键字、类型(下)-v1.wmv Java运算符、表达式.wmv 分支、循环语句.wmv 分支、循环语句(下).wmv 数组与方法.wmv 数组与方法(下).wmv 面向对象基础_01.wmv 面向对象

永生天地 1291

mldn出品java风暴_MLDN出品JAVA风暴-JAVA学习的终极资料

《MLDN出品JAVA风暴-JAVA学习的终极资料》教程列表:1-Java介绍及JDK配置MLDN出品JAVA风暴-JAVA学习的终极资料》2-标识符号、关键字、类型(上)Java标识符《MLDN出品JAVA风暴-JAVA学习的终极资料》3-标识符号、关键字、类型(下)Java标识MLDN出品JAVA风暴-JAVA学习的终极资料》4-运算符、表达式Java运算符、表达式MLDN出品JAVA风暴-J...

weixin_33313117的博客 181

Java面试汇总+答案

本文转载,只是加了目录方便阅读,原文链接:https://blog.youkuaiyun.com/qq_18298439/article/details/80939968 目录1.面向对象和面向过程的区别2.Java的四个基本特性(抽象、封装、继承,多态)3.重载和重写的区别4.构造器Constructor是否可被override5.访问控制符public,protected,private,以及默认的区别6.是否可以继承String类7.String和StringBuffer、StringBuilder的区别8.ha

橘生淮南 1376

【名师课堂】阿里免费分享Java高级开发

课程介绍 当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程、常用类库、IO编程、网络编程、类集框架、JDBC等与Java实际应用有关的开发技术。 课程目标  掌握Java多线程开发、网络编程、JDBC等 适合人群  Java开发者 课时列表 课时1:Ecl

京庐空间 6083

java基础知识刷题网站,稳进大厂

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

2401_84414664的博客 822

Java面试题

方法的修饰符访问控制修饰符:公共访问控制符public、保护访问控制符protected、缺省默认default、私有访问控制符private非访问控制符:抽象方法控制符abstract 、静态方法控制符static 、最终方法控制符final 、本地方法控制符native 、同步方法控制符synchronized正确答案:CA.start()B.init()C.run()run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。

weixin_64282111的博客 985

Java高手是如何练成的

下面是377个Java的例子。如果你能都作出来,那恭喜你,一个新的Java高手诞生了。 如果有人不相信这些例子都是 Java做的,可以看看清华大学的《Java范例开发大全》 [img]http://i3.6.cn/cvbnm/b4/19/a9/0581acde6c4f73cc659fbeffc5329c67.jpg[/img] 实例1 开发第一个Java程序 实例2 自动提升 实例3...

刘飞 298
上一篇: 【Java高级特性】java学习之旅35-多线程
下一篇: 【Java高级特性】java学习之旅37-注解
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值