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

最后

关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份pdf文档内,分成了以下几大专题:

  • Java基础部分

  • 算法与编程

  • 数据库部分

  • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)

这份面试文档当然不止这些内容,实际上像JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。

作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。

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

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

//查询网站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

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);//阻塞接收

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

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

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

ava.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);//阻塞接收

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

[外链图片转存中…(img-dkQFM6hG-1715815931187)]

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

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

  • 30
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值