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

最后

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

DatagramSocket socket = new DatagramSocket();

//2.建个包

String msg = “你好啊,服务器”;

//3.发送给谁

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

int port = 9090;

DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, address, port);

//4.发送包

socket.send(packet);

}

}

接收端

package cn.bloghut.lesson3;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.ServerSocket;

/**

  • @author by 闲言

  • @classname UdpServerDemo1

  • @description TODO

  • @date 2021/8/1 23:57

*/

public class UdpServerDemo1 {

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

//开放端口

DatagramSocket socket = new DatagramSocket(9090);

//接收数据包

byte[] buff =new byte[1024];

DatagramPacket packet = new DatagramPacket(buff, 0, buff.length);

socket.receive(packet);//阻塞接收

System.out.println(packet.getAddress());

System.out.println(new String(packet.getData(),0,packet.getData().length));

socket.close();

}

}

UDP 实现聊天实现

发送方

package cn.bloghut.chat;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

/**

  • @author by 闲言

  • @classname UdpSenderDemo01

  • @description 接收端

  • @date 2021/8/2 0:05

*/

public class UdpSenderDemo01 {

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

//获取连接

DatagramSocket socket = new DatagramSocket(8080);

while (true) {

//准备数据

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

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();

}

我的面试宝典:一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

netSocketAddress(“localhost”, 6666));

//发送数据

socket.send(packet);

if (data.equals(“bye”)) {

break;

}

}

socket.close();

}

我的面试宝典:一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

[外链图片转存中…(img-jVBzSs5X-1715815964257)]

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

[外链图片转存中…(img-Fj7gwlZe-1715815964257)]

还有源码相关的阅读学习

[外链图片转存中…(img-mUIDsZzc-1715815964258)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值