最全java网络编程基础(1),2024年Java技术下半场在哪

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

image

(2)刷的算法题(还有左神的算法笔记)

image

(3)面经+真题解析+对应的相关笔记(很全面)

image

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!

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

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

IP地址分为IPV4、IPV6两类。

这里写图片描述

缺点:

IP地址都是由数字组成,不太方便记忆。(但是可以将IP地址和域名对应起来,利用DNS解析就可以通过域名得到IP地址,只需要记住比较好记的域名就可以了)

特殊的IP地址:127.0.0.1(本地回环地址、保留地址)可用于简单的测试网卡是否故障。表示本机。

这里写图片描述

②、端口号:用于标识进程的逻辑地址。不同的进程都有不同的端口标识。

端口:要将数据发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这些数字,则将这些数字称为端口。(此端口是一个逻辑端口)

有效端口:范围是065535,其中01024是系统使用或者保留端口。

③、传输协议:通讯的规则。例如:TCP、UDP协议

1、网络通讯步骤:

确定对端IP地址→ 确定应用程序端口 → 确定通讯协议

总结:网络通讯的过程其实就是一个(源端)不断封装数据包和(目的端)不断拆数据包的过程。

简单来说就是:发送方利用应用软件将上层应用程序产生的数据前后加上相应的层标识不断的往下层传输(封包过程),最终到达物理层通过看得见摸得着的物理层设备,例如:网线、光纤…等将数据包传输到数据接收方,然后接收方则通过完全相反的操作不断的读取和去除每一层的标识信息(拆包过程),最终将数据传递到最高层的指定的应用程序端口,并进行处理。

二、Java中网络通信三要素的体现


1、IP地址:在Java中,使用java.net包中的InetAddress类来描述IP地址。

2、InetAddress类的继承体系:

InetAddress

|–Inet4Address:用于表示IPV4

|–Inet6Address:用于表示IPV6


   注意:InetAddress类没有构造方法,无法通过new去实例化对象。但是可以通过InetAddress类提供的静态方法来获取该类的对象,用该类接收。同时可以通过InetAddress类提供的相关方法来获取需要的信息,例如:IP地址、主机名等等。



InetAddress类的常用方法:

InetAddress getByName(String host):通过主机名获取InetAddress对象。

InetAddress getLocalHost():获取本机的InetAddress对象。

String getHostName():获取主机名。

String getHostAddress():获取主机的IP地址。

代码示例:


import java.net.*;  

class IPDemo  

{  

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

       {  

              InetAddress i = InetAddress.getLocalHost();  



              System.out.println(i.toString());     //获取当前主机的主机名和IP地址  

              System.out.println("ipaddress:"+i.getHostAddress());    //获取本机ip地址。  

              System.out.println("hostname:"+i.getHostName());    //获取本机主机名。  



              InetAddress ia = InetAddress.getByName("www.baidu.com");  

              System.out.println("ipaddress:"+ia.getHostAddress());   //获取百度主机的ip地址。  

              System.out.println("hostname:"+ia.getHostName());   //获取百度主机的主机名。  

       }  

}  

输出结果:

hy-PC/172.16.128.143

ip address:172.16.128.143

hostname:hy-PC

ip address:119.75.218.77

hostname:www.baidu.com

由于可以通过InetAddress类的方法来获取指定域名主机的IP地址,但是由于有些域名有多个IP地址,例如:百度、新浪、搜狐等服务器主机名可能对应多个IP地址,所以可以通过InetAddress类中的getAllByName()方法来获取。

代码示例:


import java.net.*;  

class IPDemo  

{  

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

       {  

              //可以通过InetAddress类中的静态方法getAllByName()来获取与指定主机名对应的多个IP地址信息。用一个InetAddress型数组接收。  

              InetAddress[] iaa = InetAddress.getAllByName("www.qq.com");  

              for(InetAddress ia : iaa)  

              {  

                     System.out.println(ia.toString());   //通过高级for循环进行打印输出。  

              }  

       }  

}

输出结果:

www.qq.com/101.226.129.158

www.qq.com/101.226.103.106

4、端口:由于端口都是用数字进行标识,所以没有必要将端口封装成对象。

5、传输协议TCP和UDP

①、UDP:User Datagram Protocol用户数据报协议

特点:

面向无连接:传输数据之前源端和目的端不需要建立连接。

每个数据报的大小都限制在64K(8个字节)以内。

面向报文的不可靠协议。(即:发送出去的数据不一定会接收得到)

传输速率快,效率高。

现实生活实例:邮局寄件、实时在线聊天、视频会议…等。

②、TCP:Transmission Control Protocol传输控制协议

特点:

面向连接:传输数据之前需要建立连接。

在连接过程中进行大量数据传输。

通过“三次握手”的方式完成连接,是安全可靠协议。

传输速度慢,效率低。

现实生活实例:打电话、下载文件…等。

小知识点:TCP有6种标志位:SYN(建立联机)、ACK(确认)、PSH(传送)、FIN(结束)、RST(重置)、URG(紧急)

Sequence number(顺序号码)Acknowledge number(确认号码)

三次握手的过程: 第一次握手:建立连接时,客户端发送SYN包(SYN=x)到服务器,并进入SYN_SEND状态,等待服务器确认。

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

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

三次握手完成之后,客户端和服务器之间开始传送数据。

三次握手过程图解:

这里写图片描述

三次握手在现实生活中理解场景:

这里写图片描述

6、Socket的基本介绍:

① Socket编程:通常所说的网络编程其实就是Socket编程。

②、什么是socket?

Socket的字面意思是插槽、插座的意思。其实,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

Socket通常也称作“套接字”,用于描述IP地址和端口。应用程序两端通过“套接字”向网络发出请求或者应答网络请求。

③、Socket和ServerSocket类位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。

在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。

不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

④、Socket中的常用方法:

java.net.Socket类继承与Object,有8个构造方法。其中三个使用最频繁的方法:

void accept():用于获取连接到服务端的客户端对象,并且返回一个客户端的Socket对象实例。该方法是一个阻塞式方法。

“阻塞”使程序运行暂时”停留”,直到一个会话产生,然后程序继续;通常”阻塞”是由循环产生的。

InputStream getInputStream():该方法获得网络连接输入,同时返回一个InputStream对象实例,。

OutputStream getOutputStream():该方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。

⑤、C/S模型程序开发原理:

服务器Server:使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端Client:使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话。会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个大于1024的端口。

三、TCP、UDP传输实现过程(步骤)


1、UDP传输:DatagramSocket/DatagramPacket

UDP传输实现步骤:

①、建立UDP传输的发送端和接收端。

②、提供数据,并将数据封装到数据包中。

③、调用Socket服务的发送、接收功能,将数据包发出去或者接收回来。

④、关闭Socket服务。

/*

需求:通过UDP传输方式,将一段文字数据发送出去。

定义UDP发送端:

思路(实现步骤):

1、建立UDP的Socket服务。

2、提供数据,并将数据封装到数据包中。

3、通过Socket服务的发送功能,将数据包发出去。

4、关闭资源。

*/


import java.net.*;  

class UdpSend  

{  

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

       {  

              //1、创建udp服务,通过DatagramSocket对象。  

              DatagramSocket ds = new DatagramSocket();  



              //2、确定数据,并封装成数据包。  

              byte[] buf = "udp I am coming...".getBytes();  //将数据封装成字节数组。  

              DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.88"),10000);  //将指定长度的数据发送到指定IP地址主机的指定端口。  



              //3、通过socket服务,将已有的数据包发送出去。通过send方法。  

              ds.send(dp);  



              //4、关闭资源。  

              ds.close();  

       }  

}

UDP接收端:

/*

需求:定义一个应用程序,用于接收udp协议传输的数据并处理的。

思路(实现步骤):

1、定义UDP的Socket服务。通常会监听一个端口,其实就是给这个接收网络应用程序定义数字标识。方便于明确哪些数据过来,该应用程序可以处理。(如果不指定监听端口,系统会自动分配一个监听端口)

2、定义一个数据包,因为要存储接收到的字节数据。因为数据包对象中有更多功能可以提取字节数据中的不同数据信息。

3、通过Socket服务的receive方法将收到的数据存入已定义好的数据包中。

4、通过数据包对象的特有功能,将这些不同的数据取出。打印在控制台上。

5、关闭资源。

*/


import java.io.*;  

import java.net.*;  

class UdpRece  

{  

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

    {  

        //1、创建UDP的Socket服务。建立端点。  

        DatagramSocket ds = new DatagramSocket(10000);  



        //2、定义数据包。用于存储数据。  

        byte[] buf = new byte[1024];  

        DatagramPacket dp = new DatagramPacket(buf,buf.length);  



        //3、通过Socket服务的receive方法,将收到的数据存入数据包中。  

        ds.receive(dp);  //receive方法是一个“阻塞式”方法,相当于线程当中的wait方法。即当没有数据发送过来的时候,就一致处于等待状态。  



        //4、通过数据包的方法获取其中的数据。  

        String ip = dp.getAddress().getHostAddress();  //获取ip地址。  

        String data = new String(dp.getData(),0,dp.getLength());  //获取数据。  

        int port = dp.getPort();  //获取端口。  



        System.out.println(ip+"::"+data+"::"+port);  



        //5、关闭资源。  

        ds.close();  

    }  

} 

2、TCP传输:Socket/ServerSocket

TCP传输实现步骤:

①、建立TCP传输的客户端(Socket)和服务端(ServerSocket)。

②、建立连接后,通过Socket中的IO流进行数据的传输。

③、关闭Socket服务。

TCP传输基本思路:

①、客户端:

客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常。

连接成功,说明客户端与服务端建立了通道,那么通过IO流就可以进行数据的传输,而Socket对象已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取即可。

与服务端通讯结束后,关闭Socket服务。

②、服务端:

服务端需要明确它要处理的数据是从哪个端口进入的。(监听端口)

当有客户端访问时,要明确是哪个客户端,可通过accept()获取已连接的客户端对象,并通过该对象与客户端通过IO流进行数据传输。

当该客户端访问结束,关闭该客户端服务。

③ 、TCP传输示例图:

这里写图片描述


import java.io.*;  

import java.net.*;  

/* 

客户端: 

通过查阅Socket对象,在该对象建立时就可以去连接指定主机。 

因为TCP是面向连接的,所以在建立Socket服务时,就要有服务端存在并连接成功。形成通路后,在该通道进行数据的传输。 



需求:给服务端发送一个文本数据。 



步骤: 

1、创建Socket服务,并指定要连接的主机和端口。 

*/  

class TcpClient  

{  

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

       {  

              //创建客户端的Socket服务,指定目的主机和端口。  

              Socket s = new Socket("192.168.1.88",10003);  



              //为了发送数据,应该获取Socket流中的输出流。  

              OutputStream out = s.getOutputStream();  



              out.write("tcp I am coming...".getBytes());  



              s.close();  

       }  

} 

/*

需求:定义端点接收数据,并打印在控制台上。

服务端:

1、建立服务端的Socket服务,通过ServerSocekt();并监听一个端口。

2、获取连接过来的客户端对象。通过ServerSocket的accept方法完成。没有连接就会一直等,所以这个方法是一个阻塞式方法。

3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。

4、关闭服务端。(可选)

*/


class TcpServer  

{  

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

       {  

              //建立服务端的Socket服务,并监听一个端口。  

              ServerSocket ss = new ServerSocket(10003);  




## 最后

**码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到**

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考

以下是部分内容截图
![架构面试专题及架构学习笔记导图.png](https://img-blog.csdnimg.cn/img_convert/e34608a37789f784204a7d56b34d8a16.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**





class TcpServer

{

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

   {  

          //建立服务端的Socket服务,并监听一个端口。  

          ServerSocket ss = new ServerSocket(10003);  

最后

码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考

以下是部分内容截图
[外链图片转存中…(img-DKwdXg5a-1715572095664)]

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

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

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值