javasocke客户端异常断开连接后重连发送不了消息_Java之⽹
络编程
⽹络编程
在学习Java的⽹络编程前,我们需要知道⼀些关于⽹络编程的知识。对于⽹络编程,其实质是计算机之间的数据交换,也就是通信。⽽实现这种交换/通信我们需要有以下两个要素:
1、⽹络通信协议
2、IP和端⼝号
那么这两个到底是什么呢?接下来我们简单来看看:
⽹络通信协议
⽹络通信协议就是计算机进⾏通信之前我们提前制定好的数据传送格式【会打包成⼀个数据包】,如果不按照这种格式来,那么就会传输失败。⽽今天我们学的是TCP/IP协议(传输控制协议/⽹际协议),【注:TCP/IP协议⼀定程度上参考了ISO体系,有兴趣的读者可以⾃⾏了解】这个协议是⽹络中最基本的协议,
它定义了计算机如何连接因特⽹,以及数据如何在他们之间传输的标准。它的内部包含⼀系列的⽤于处理数据通信的协议,并被划分为4层:应⽤层,传输层,⽹络层,链路层。我们在Java程序中主要涉及到传输层,⾥⾯主要有两个我们要编程的内容:TCP协议和UDP协议。
TCP协议
⽤户传输协议,这是⼀种⾯向连接的协议。 当⼀台计算机向另⼀台计算机请求连接时【以下请求连接的计算机称为客户端,⽽被请求连接的计算机称为服务端】,需要经过三次握⼿。⽽当要断开连接时,需要经历四次挥⼿。怎么理解三次握⼿和四次挥⼿呢?我们简单的看下⾯的图:
⼤概的流程图我们简化为⽇常的通话来⽅便理解。三次握⼿,第⼀次是客户端向服务器发出连接请求(图中的我去你,你在哪),第⼆次是服务器响应客户端的请求(图中的我在xxx),第三次是客户端收到服务端响应,向服务器发送确认信息(图中的马上到),以此来连接。⽽四次挥⼿原理类似,就不再阐述。这种协议的好处是保证了数据的安全。等下与UDP对⽐就能体现了。
UDP协议
⽤户数据包协议,这是⼀种⽆连接的协议,省略了TCP那些繁琐的步骤,所以耗资⼩、效率较⾼。但是就是也是因为⽆连接,所以可能会造成数据丢失。(接下来编写代码之后就能够看的⼀清⼆楚了)
IP和端⼝号
以上我们知道了两台计算机连接的协议,有了协议,没有⽬的地也是没⽤的,⽽IP和端⼝号就是⽤来表⽰⽬的地的【如果把IP地址表⽰具体到⼩区/村等的地址,那么端⼝号就相当于门牌号】。
IP地址
互联⽹协议地址,每⼀台电脑都有属于⾃⼰的IP地址,对于IP地址,我们有以下的分类:
1、IPv4,以.分开,由四个字段组成,每⼀个字段的范围为0~255
2、IPv6,以:分开,由⼋个字段组成,每⼀个字段以⼗六进制表⽰。
我们可以通过cmd命令中的ipconfig来查看IP地址,其中,以太⽹适配器中的IPv4地址和IPv6就是本机的IP地址:
注:这⾥的IPv6地址的表⽰是以0位压缩表⽰法来表⽰的。
⽽当我们连接⽹络后,在⽹络中也有⼀个IP地址:
前者是接⼊⽹线分配的IP地址,后者是接⼊WIFI分配的IP地址。⽽对于WIFI分配的IP地址,⼀般都是的格式。【后⾯的代码实现就是基于同⼀个WIFI下/局域⽹实现通信的】
端⼝
⼀个端⼝⽤来表⽰计算机上的⼀个进程,但这个端⼝和PID【cmd的⼀些常⽤的动词性命令、⽹络命令简单提过】是不⼀样的,如果简单理解的话,PID主要对内的,⽽端⼝是对外的。怎么理解呢?当你每在计算机上运⾏⼀个程序时,计算机都会给这个程序分配⼀个PID,每次打开程序所分配的PID⼀般是不⼀样的【cmd动词性命令taskkill中可以看出】,⽽端⼝主要是让外部来识别的,所以⼀般都是⼀个程序对应⼀个端⼝。⽽且端⼝不像PID有多种⽅法可以直接看到,需要使⽤软件来查看。
端⼝号由两个字节组成,在0~65535之间,⽽且需要注意的是,⼀般1024前的端⼝号都已经被系统占⽤了:
端⼝的分类:
1、公有端⼝0~1023:
HTTP:80
网络编程之delphiHTTPS:443
FTP:21
TELENT:23
2、程序注册端⼝1024~49151:
TOMCAT:8080
MySQL:3306
Oracle:1521
3、动态/私有端⼝49152~66535
把上述的⼏个概念弄明⽩之后,我们就可以学习Java中相对应的类来进⾏编程了。我们先看看所需要的类,这些类都位于java包下:InetAddress类:这个类没有构造⽅法,我们⼀般⽤这个类来获取⼀些东西:
其中常⽤的⽅法有:
通过以上的⽅法还有⼀个"127.0.0.1"或者"localhost"表⽰本机地址,我们就有以下⼏种获取本机ip的⽅法:
Socket类:
主要⽤到的有两个:
常⽤的⽅法有:
ServerSocket类:
常⽤的构造⽅法是第⼆个。⽽常⽤的⽅法有:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论