目录
一、网络通讯协议
1、概述
2、IP 地址和端口号
3、InetAddress 类
二、TCP 协议与 UDP 协议
1、TCP 协议
(1) 三次握手
(2) 四次挥手
2、UDP 协议
三、TCP 通信
1、ServerSocket 类(实现服务端)
2、Socket 类(实现客户端)
3、TCP 通信实例
四、UDP 通信
1、DatagramPacket 类
(1) 构造方法
(2) 常用方法
2、DatagramSocket 类
(1) 构造方法
(2) 常用方法
3、UDP 通信实例
五、TCP 和 UDP的区别
一、网络通讯协议
========
1、概述
通过计算机网络可以实现多台计算机之间的连接通讯,这些连接和通讯的规则被称为网络通讯协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通讯双方必须同时遵守才能完成数据交换。
网络通讯协议中使用最为广泛的是 TCP/IP 协议(包括 TCP 协议和 IP 协议),UDP 协议和其他一些协议的协议组。TCP/IP 协议的层次比较简单,在进行数据传输时,要求发送的数据与收到的数据完全一致,这时就要在原有的数据上添加很多信息,以保证数据在传输过程中格式完全一致,其分为四层,如图:

TCP/IP 协议中的四层分别是:链路层、网络层、传输层、应用层,每层分别负责不同的通讯功能,具体功能如下
-
链路层:用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤,网线提供的驱动
-
网络层:是整个 TCP/IP 协议的核心,主要用于将传输的数据进行分组,将分组数据发送到目标计算机或网络中,有四个协议
1、网际协议IP:负责在主机和网络之间寻址和路由数据包;
2、地址解析协议ARP:获得同一物理网络中的硬件主机地址;
3、网际控制消息协议ICMP:发送消息,并报告有关数据的传输错误;
4、互联组管理协议IGMP:是一种旨在防止多点传送通信在网络中滥用的控制数据包,即只允许数据包发送到它请求它的计算机
- 传输层:主要使用网络程序进行端到端的通讯,主要使用 TCP 和 UDP
1、控制传输协议TCP:为应用程序提供可靠的通信连接,适合一次性传输大批数据的情况,并适用于要求得到响应的应用程序。
2、用户数据包协议UDP:提供了无连接的通信,不对传送数据包进行可靠保证。适合一次传输少量数据,可靠性由应用层来负责。
- 应用层:主要负责应用程序的协议,如 HTTP 协议、FTP 协议等
2、IP 地址和端口号
要想使网络中的计算机能够进行通信,必须为每台计算机指定一个标识号,通过这个标识号来指定接受数据的计算机或者发送数据的计算机。
在TCP/IP协议中,这个标识号就是IP地址,它可以唯一标识一台计算机,目前,IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示,如:00001010000000000000000000000001。由于二进制形式表示的IP地址非常不便记忆和处理,因此通常会将IP地址写成十进制的形式,每个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “192.168.1.100”。
随着计算机网络规模的不断扩大,对IP地址的需求也越来越多,IPV4这种用4个字节表示的IP地址面临枯竭,因此IPv6 便应运而生了,IPv6使用16个字节表示IP地址,它所拥有的地址容量约是IPv4的8×1028倍,达到2128个(算上全零的),这样就解决了网络地址资源数量不够的问题。
通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节(16位的二进制数)表示的,它的取值范围是065535,其中,01023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用。
两台计算机之间通过 IP 地址和端口号进行通讯关系如下图所示,位于网络中的一台源计算机可以通过 IP 地址去访问另一台目标计算机,再通过端口号访问目标计算机中的某个应用程序

3、InetAddress 类
在Java JDK中,提供了一个 InetAddress 类,该类用于封装一个 IP 地址,并提供了一系列与 IP 地址相关的方法,常用的方法有:
-
static InetAddress getLocalHost():用于获得本地的 InetAddress 对象
-
static InetAddress getByName(String host):用于获得指定主机的 InetAddress 对象
-
String getHostName():获得此 IP 地址的主机名
-
String getHostAddress():返回 IP 地址字符串
public static void main(String[] args) throws UnknownHostException {
//获取本地 InetAddress 对象
InetAddress host = InetAddress.ge

最低0.47元/天 解锁文章
776

被折叠的 条评论
为什么被折叠?



