?写在前面 ?博客主页:努力的小鳴人 ?系列专栏:JavaSE超详总结😋 ?欢迎小伙伴们,点赞👍关注🔎收藏🍔一起学习! ?如有错误的地方,还请小伙伴们指正!🌹
🔥系列传送门:JavaSE超详总结😋 【12章 Java IO流】程序员必看 IO流 详解【热榜】 【附章5计算机字符编码】多种字符编码集的说明【热榜】 【11章Java泛型】全面解读Java泛型【热榜】 【10章Java集合】几张脑图带你进入Java集合的头脑风暴【热榜】
一、网络编程概述
Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序
- Java提供的网络类库,可以实现网络连接,联网的底层细节隐藏在 Java 的本机安装系统中,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库
👌计算机网络
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源
- 网络编程的目的
直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯
二、网络通信要素概述
- 通讯双方地址
●IP ●端口号 - 网络通信协议
●OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广 ●TCP/IP参考模型(或TCP/IP协议):事实上的国际标准 - 数据封装与拆封
🔥通信要素1:IP和端口号
通讯双方地址
IP
- IP 地址:InetAddress
唯一的标识 Internet 上的计算机 本地回环地址(hostAddress):127.0.0.1 - IP地址分类方式1:IPV4 和 IPV6
●IPV4 :4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽,以点分十进制表示,如192.168.0.1 ●IPV6 :128位(16个字节),写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号(:)分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984 - IP地址分类方式2:
公网地址(万维网使用) 私有地址(局域网使用)
端口号
标识正在计算机上运行的进程
- 不同的进程有不同的端口号
- 被规定为一个 16 位的整数 0~65535
- 端口分类:
●公认端口:0~1023。被预先定义的服务通信占用 ●注册端口:1024~49151。分配给用户进程或应用程序 ●动态/私有端口:49152~65535 - 端口号与IP地址的组合得出一个网络套接字:
Socket
👌InetAddress类
- 两种方式表示地址:
域名(hostName):https://blog.csdn.net/m0_64996150?spm=1000.2115.3001.5343 IP 地址(hostAddress):202.108.35.210 - 两个子类:Inet4Address、Inet6Address
- InetAddress类对象含有一个Internet主机地址的域名和IP地址
- 没有公共的构造器,而是提供几个静态方法来获取InetAddress实例:
public static InetAddress getLocalHost()
public static InetAddress getByName(String host)
- 常用方法
public String getHostAddress()
public String getHostName()
public boolean isReachable(int timeout)
👌Socket类
网络通信其实就是Socket间的通信
- 分类
流套接字(stream socket):使用TCP提供可依赖的字节流服务 数据报套接字(datagram socket):使用UDP提供“尽力而为”的数据报服务 - 常用构造器
public Socket(InetAddress address,int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号 public Socket(String host,int port) 创建一个流套接字并将其连接到指定主机上的指定端口号 - 常用方法
🔥通信要素2:网络协议
计算机网络中实现通信必须有一些约定,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准
- 分层思想
在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来:最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系,各层互不影响
👌TCP/IP协议
传输控制协议**TCP** 用户数据报协议**UDP**
●TCP/IP协议模型形成了高效的四层体系结构,即物理链路层、IP层、传输层和应用层 ●IP(Internet Protocol)协议是网络层的主要协议,支持网间互连的数据通信
三、TCP网络编程
基于Socket的TCP编程
- 客户端Socket四个基本的步骤
①创建 Socket:根据指定服务端的 IP 地址或端口号构造 Socket 类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常 ②打开连接到 Socket 的输入/出流: 使用 getInputStream()方法获得输入流,getOutputStream()方法获得输出流,进行数据传输 ③按照一定的协议对 Socket 进行读/写操作:通过输入流读取服务器放入线路的信息,通过输出流将信息写入线程 ④关闭 Socket:断开客户端到服务器的连接,释放线路
Socket s = new
Socket(“192.168.40.165”,8899);
OutputStream out = s.getOutputStream();
out.write(" hello".getBytes());
s.close();
- 服务器的四个基本的步骤:
①调用ServerSocket(int port):创建一个绑定在指定端口的服务器端套接字,监听客户端的请求 ②调用accept():监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象。 ③调用该Socket类对象的getOutputStream() 和 getInputStream ():获取输出流和输入流 ④关闭ServerSocket和Socket对象:客户端访问结束,关闭通信套接字
ServerSocket ss = new ServerSocket(8899);
Socket s = ss.accept ();
InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int num = in.read(buf);
String str = new String(buf,0,num);
System.out.println(s.getInetAddress().toString()+”:”+str);
s.close();
ss.close();
🔥三次握手和四次握手
建立TCP需要三次握手才能建立,而断开连接则需要四次握手
三次握手
三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息 四次握手
建立一个连接需要三次握手,终止一个连接要经过四次握手,这由TCP的半关闭(half-close)造成的,所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力
四、UDP网络编程
DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序
-
UDP数据报通过数据报套接字 DatagramSocket 发送和接收 -
DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号 -
步骤 ①DatagramSocket与DatagramPacket ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送、接收方法 ⑤关闭Socket -
DatagramSocket 类的常用方法 -
DatagramPacket类的常用方法
五、URL编程
统一资源定位符
- 基本结构
<传输协议>://<主机名>:<端口号>/<文件名>#片段名?参数列表 构造器 public URL (String spec):通过一个表示URL地址的字符串可以构造一个URL对象 public URL(URL context, String spec):通过基 URL 和相对 URL 构造一个 URL 对象。 public URL(String protocol, String host, String file); public URL(String protocol, String host, int port, String file);常用方法 public String getProtocol( ) 获取该URL的协议名 public String getHost( ) 获取该URL的主机名 public String getPort( ) 获取该URL的端口号 public String getPath( ) 获取该URL的文件路径 public String getFile( ) 获取该URL的文件名 public String getQuery( ) 获取该URL的查询名
🎁总结:网络编程逐步的介绍,好多协议,TCP、UDP网络编程,URL编程很多 👌 作者算是一名Java初学者,文章如有错误,欢迎评论私信指正,一起学习~~ 😊如果文章对伙伴们来说有用的话,点赞👍关注🔎收藏🍔就是我的最大动力! 🚩不积跬步,无以至千里,书接下回,欢迎再见🌹
|