Java中网络编程、TCP通信与UDP通信

目录

一、网络通讯协议

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值