B站【狂神说Java笔记】-网络编程

IPV6 ;128位。8个无符号整数!

公网-私网


测试代码

package cn.bloghut.lesson01;

import java.net.InetAddress;

import java.net.UnknownHostException;

/**

  • @author by 闲言

  • @classname TestInetAddress

  • @description 测试IP

  • @date 2021/8/1 17:52

*/

public class TestInetAddress {

public static void main(String[] args) throws Exception {

//查询本机的ip地址

InetAddress localhost = InetAddress.getByName(“localhost”);

System.out.println(localhost);

InetAddress localHost = InetAddress.getLocalHost();

System.out.println(localHost);

System.out.println(“=================”);

//查询网站ip地址

InetAddress name = InetAddress.getByName(“www.baidu.com”);

System.out.println(name);

System.out.println(“=================”);

//常用方法

//System.out.println(name.getAddress());

System.out.println(name.getHostAddress());//获取主机ip地址

System.out.println(name.getHostName());// 获取域名

System.out.println(name.getCanonicalHostName());//获取规范的主机ip地址

}

}


3.端口


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

1.一栋楼表示一个ip ,这栋楼里面的 门牌号 就是端口号。

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

3.端口被规定为:0-65535

4.TCP ,UDP: 每个都有 0-65535 * 2 ,单个协议下,端口号不能冲突。

5.端口分类

共有端口0-1023

HTTP : 80

HTTPS :443

FTP : 21

Telet : 23

程序注册端口:1024-49151,分配给用户或者程序

Tomcat:8080

Mysql:3306

Oracle:1521

动态、私有:49152-65535

netstat -ano #查看所有端口

netstat -ano | findstr “5900” #查看指定的端口

tasklist | findstr “8696” #查看指定端口的进程

Ctrl + Shift + ESC


练习代码

package cn.bloghut.lesson01;

import java.net.InetSocketAddress;

/**

  • @author by 闲言

  • @classname TesyInetSocketAddress

  • @description TODO

  • @date 2021/8/1 18:12

*/

public class TesyInetSocketAddress {

public static void main(String[] args) {

InetSocketAddress socketAddress = new InetSocketAddress(“127.0.0.1”, 8080);

InetSocketAddress socketAddress1 = new InetSocketAddress(“localhost”, 8080);

System.out.println(socketAddress);

System.out.println(socketAddress1);

System.out.println(“====================”);

System.out.println(socketAddress.getAddress());//ip地址

System.out.println(socketAddress.getHostName());//主机名称

System.out.println(socketAddress.getHostString());

System.out.println(socketAddress.getPort());//端口

}

}


4.通信协议


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

网络通信协议:

1.速率

2.传输码率

3.代码结构

4.传输控制

问题:非常的复杂

TCP/IP协议簇:实际上是一组协议

重要:

TCP:用户传输协议

UDP:用户数据报协议

出名的协议:

TCP

IP

TCP和UDP 对比:

TCP:打电话

连接: 稳定

三次握手

A:你愁啥?

B:瞅你咋地?

A:干一次!

四次挥手

A:我要断开了 (我要走了)

B:我知道你要断开了(你真的要走了吗?)

B:你真的断开了吗?(你真的真的要走了吗?)

A:我真的断开了 (我真的要走了)

客户端,服务端

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

在这里插入图片描述

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

在这里插入图片描述

UDP:发短信

1.不连接,不稳定

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

3.不管有没有准备好,都可以发给你…

4.导弹

5.DDOS:洪水攻击!(饱和攻击)


客户端

1.建立连接

2.发送消息

package cn.bloghut.lesson02;

import java.io.IOException;

import java.io.OutputStream;

import java.net.InetAddress;

import java.net.Socket;

/**

  • @author by 闲言

  • @classname TcpClientDemo1

  • @description 客户端

  • @date 2021/8/1 22:55

*/

public class TcpClientDemo1 {

public static void main(String[] args) throws Exception{

Socket socket = null;

OutputStream os = null;

//要知道服务器地址

try {

InetAddress serverIp = InetAddress.getByName(“localhost”);

int port = 9999;

//2.创建连接

socket = new Socket(serverIp,port);

//3.发生消息 IO流

os = socket.getOutputStream();

os.write(“你好,闲言”.getBytes());

} catch (IOException e) {

e.printStackTrace();

}finally {

if (os != null) {

os.close();

}

if (socket != null) {

socket.close();

}

}

}

}

服务器

1.建立服务连接的端口 ServerSocket

2.等待用户的连接 accept

3.接收用户信息

package cn.bloghut.lesson02;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;

/**

  • @author by 闲言

  • @classname TcpServerDemo01

  • @description 服务器端

  • @date 2021/8/1 22:55

*/

public class TcpServerDemo01 {

public static void main(String[] args) throws Exception {

ServerSocket serverSocket = null;

Socket accept = null;

InputStream is = null;

ByteArrayOutputStream baos = null;

try {

//1. 我得有一个地址

serverSocket = new ServerSocket(9999);

//2.等待客户端连接过来

accept = serverSocket.accept();

//3.读取客户端消息

is = accept.getInputStream();

/*byte[] buf = new byte[1024];

int len;

while ((len = is.read(buf)) != -1 ){

String s = new String(buf, 0, len);

System.out.println(s);

}*/

//管道流

baos = new ByteArrayOutputStream();

byte[] buff = new byte[1024];

int len = -1;

while ((len = is.read(buff)) != -1) {

baos.write(buff, 0, len);

}

System.out.println(baos.toString());

} catch (IOException e) {

e.printStackTrace();

} finally {

if (baos != null) {

baos.close();

}

if (is != null) {

is.close();

}

if (accept != null) {

accept.close();

}

if (serverSocket != null) {

serverSocket.close();

}

}

}

}


TCP实现文件上传

客户端

package cn.bloghut.lesson02;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

/**

  • @author by 闲言

  • @classname TcpServerDemo2

  • @description 服务端

  • @date 2021/8/1 23:25

*/

public class TcpServerDemo2 {

public static void main(String[] args) throws Exception{

//1.创建服务

ServerSocket serverSocket = new ServerSocket(9999);

//2.监听客户端连接

Socket accept = serverSocket.accept();

//3.获取输入流

InputStream is = accept.getInputStream();

//4.文件输出

FileOutputStream fos = new FileOutputStream(new File(“receive.jpg”));//接收文件就要用文件的管道流

byte[] buff = new byte[1024];

int len;

while ((len = is.read(buff)) != -1){

fos.write(buff,0,len);

}

//通过客户端我接收完毕了

OutputStream os = accept.getOutputStream();

os.write(“我接收完毕了,你可以断开了”.getBytes());

fos.close();

is.close();

accept.close();

serverSocket.close();

}

}

服务器端

package cn.bloghut.lesson02;

import java.io.*;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

/**

  • @author by 闲言

  • @classname TcpClientDemo2

  • @description 客户端

  • @date 2021/8/1 23:25

*/

public class TcpClientDemo2 {

public static void main(String[] args) throws Exception {

//1.建立连接

Socket socket = new Socket(InetAddress.getByName(“127.0.0.1”), 9999);

//2.创建一个输出流

OutputStream os = socket.getOutputStream();

//3.读取文件

FileInputStream is = new FileInputStream(new File(“1.jpg”));

byte[] buff = new byte[1024];

int len;

//4.写出文件

while ((len = is.read(buff)) != -1) {

os.write(buff, 0, len);

}

//通知服务器,我已经结束了

socket.shutdownOutput();//我已经传输完了的意思

//确定服务器接收完毕,才能够断开连接

InputStream inputStream = socket.getInputStream();//接收字符、就用字节的管道流

ByteArrayOutputStream bos = new ByteArrayOutputStream();

byte[] buff2 = new byte[1024];

int len2;

while ((len2 = inputStream.read(buff)) != -1) {

bos.write(buff2, 0, len2);

}

System.out.println(bos.toString());

//5.释放资源

bos.close();

inputStream.close();

is.close();

os.close();

socket.close();

}

}


UDP

发短信,需要IP地址

发送消息

package cn.bloghut.lesson3;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

/**

  • @author by 闲言

  • @classname UdpClientDemo1

  • @description 不需要连接服务器

  • @date 2021/8/1 23:53

*/

public class UdpClientDemo1 {

public static void main(String[] args) throws Exception{

//1.建立一个Socket
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-ZdYAnoRn-1713814245747)]

[外链图片转存中…(img-KgEzMpqT-1713814245748)]

[外链图片转存中…(img-GBI3tNOD-1713814245748)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

[外链图片转存中…(img-G02mKli8-1713814245749)]

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

[外链图片转存中…(img-ZnZIGSRc-1713814245749)]

[外链图片转存中…(img-QNbaeVvU-1713814245749)]

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 26
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 狂神Java培训领域中的知名人物,他所开设的Java课程备受关注和好评。在Java学习过程中,配套笔记是至关重要的。狂神Java配套笔记,就是他自己编写的一份针对Java初学者的笔记。这份笔记内容详实,包括Java基础语法、面向对象编程、数据库操作等多个方面。并且,狂神还会根据学员的反馈及时修改和完善这份笔记Java配套笔记对于Java学习的初学者来,是一份非常好的辅助资料。通过这份笔记,初学者可以系统地学习Java编程涉及到的各个方面,同时也可以在学习过程中及时记录下重要的知识点,方便日后复习和查询。同时,这份笔记编写者是一位经验丰富的Java教育者,他对Java的理解和知识点的讲解都非常到位和深入浅出。 总之,Java配套笔记是一份非常重要的学习资料,它不仅可以帮助初学者更好地学习Java编程,还可以对Java学习者在日后的实际工作中提供有效的参考和帮助。如果你想学好Java,一份好的Java配套笔记绝对是必不可少的。 ### 回答2: 狂神Java配套笔记是非常好的学习资料,对于刚学习Java的初学者来尤其有用。这些笔记详细介绍了Java编程的一些基础知识,例如数据类型、变量、循环结构、方法等。而随着学习的深入,笔记也逐渐开始讲解Java中的高级特性,例如面向对象编程、异常处理等。 狂神Java配套笔记的另一个优点是非常易于理解和学习。这些笔记使用了简单易懂的语言和生动的示例来阐述概念,使得学习者可以快速入门。此外,笔记中还包含了大量的练习题,可以帮助学习者巩固所学知识和加深理解。 除了配合视频课程使用,狂神Java配套笔记也可以作为一个独立的学习资料来使用。学习者可以通过自学的方式来学习Java编程,掌握Java编程的基础知识和实践技能。 总之,狂神Java配套笔记是一份非常优秀的学习资料,无论是初学者还是有一定Java基础的学习者都可以从中受益。学习者只需要按照笔记的步骤一步一步地学习,就可以轻松掌握Java编程的基础知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值