Java Review三十八、网络编程
发布时间:2023-03-13 13:45:19 所属栏目:教程 来源:
导读:目录
网络基础
IP地址
端口
域名
网络模型
常用协议
Java 的基本网络支持
使用 InetAddress
URL、 URLConnection 和 URLPermission
基于TCP协议的网络编程
TCP协议基础
使用 ServerSocket 创建TCP 服务器
网络基础
IP地址
端口
域名
网络模型
常用协议
Java 的基本网络支持
使用 InetAddress
URL、 URLConnection 和 URLPermission
基于TCP协议的网络编程
TCP协议基础
使用 ServerSocket 创建TCP 服务器
|
目录 网络基础 IP地址 端口 域名 网络模型 常用协议 Java 的基本网络支持 使用 InetAddress URL、 URLConnection 和 URLPermission 基于TCP协议的网络编程 TCP协议基础 使用 ServerSocket 创建TCP 服务器端 使用 Socket 进行通信 加入多线程 记录用户信息 基于UDP协议的网络编程 UDP协议基础 使用 DatagramSocket 发送、 接收数据 使用 MulticastSocket 实现多点广播 使用代理服务器 直接使用 Proxy 创建连接 使用 ProxySelector 自动选择代理服务器 思维导图总结 网络基础 计算机网络是指两台或更多的计算机组成的网络,在同一个网络中,任意两台计算机都可以直接通信,因为所有计算机都需要遵循同一种网络协议。 那什么是互联网呢?互联网是网络的网络(internet),即把很多计算机网络连接起来,形成一个全球统一的互联网。 对某个特定的计算机网络来说,它可能使用网络协议ABC,而另一个计算机网络可能使用网络协议XYZ。如果计算机网络各自的通讯协议不统一,就没法把不同的网络连接起来形成互联网。因此,为了把计算机网络接入互联网,就必须使用TCP/IP协议。 TCP/IP协议泛指互联网协议,其中最重要的两个协议是TCP协议和IP协议。只有使用TCP/IP协议的计算机才能够联入互联网,使用其他网络协议(例如NetBIOS、AppleTalk协议等)是无法联入互联网的。 IP地址 在互联网中,一个IP地址用于唯一标识一个网络接口(Network Interface)。一台联入互联网的计算机肯定有一个IP地址,但也可能有多个IP地址。 IP地址分为IPv4和IPv6两种。IPv4采用32位地址,类似:101.202.99.12, 而IPv6采用128位地址,类似:2001:0DA8:100A:0000:0000:1020:F2F3:1428。 IPv4地址总共有2的32次方个(大约42亿),而IPv6地址则总共有2128个(大约340万亿亿亿亿),IPv4的地址目前已耗尽,而IPv6的地址是根本用不完的。 IP地址又分为公网IP地址和内网IP地址。公网IP地址可以直接被访问,内网IP地址只能在内网访问。内网IP地址类似于: 192.168.x.x 10.x.x.x 有一个特殊的IP地址,称之为本机地址,它总是127.0.0.1。 IPv4地址实际上是一个32位整数。例如: 106717964 = 0x65ca630c = 65 ca 63 0c = 101.202.99.12 如果一台计算机只有一个网卡,并且接入了网络,那么,它有一个本机地址127.0.0.1,还有一个IP地址,例如101.202.99.12,可以通过这个IP地址接入网络。 如果一台计算机有两块网卡,那么除了本机地址,它可以有两个IP地址,可以分别接入两个网络。通常连接两个网络的设备是路由器或者交换机,它至少有两个IP地址,分别接入不同的网络,让网络之间连接起来。 如果两台计算机位于同一个网络,那么他们之间可以直接通信,因为他们的IP地址前段是相同的,也就是网络号是相同的。网络号是IP地址通过子网掩码过滤后得到的。例如: 某台计算机的IP是101.202.99.2,子网掩码是255.255.255.0,那么计算该计算机的网络号是: IP = 101.202.99.2 Mask = 255.255.255.0 Network = IP & Mask = 101.202.99.0 每台计算机都需要正确配置IP地址和子网掩码,根据这两个就可以计算网络号,如果两台计算机计算出的网络号相同,说明两台计算机在同一个网络,可以直接通信。如果两台计算机计算出的网络号不同,那么两台计算机不在同一个网络,不能直接通信,它们之间必须通过路由器或者交换机这样的网络设备间接通信,我们把这种设备称为网关。 网关的作用就是连接多个网络,负责把来自一个网络的数据包发到另一个网络,这个过程叫路由。 IP地址,例如:10.0.2.15 子网掩码,例如:255.255.255.0 网关的IP地址,例如:10.0.2.2 端口 端口是一个 16 位的整数, 用于表示数据交给哪个通信程序处理。 因此, 端口就是应用程序与外界交流的出入口, 它是一种抽象的软件结构, 包括一些数据结构和 I/O (基本输入/输出) 缓冲区。 公认端口Well KNown Ports): 从 0 到 1023, 它们紧密绑定 Binding) —些特定的服务。 注 册 端 口 ( Registered Ports): 从 1024 到 49151, 它们松散地绑定一些服务。 应用程序通常应该使用这个范围内的端口。 动态和/或私有端口 Dynamic and/or Private Ports): 从 49152 到 65535,这些端口是应用程序使用的动态端口, 应用程序一般不会主动使用这些端口。 如果把 IP 地址理解为某个人所在地方的地址( 包括街道和门牌号), 但仅有地址还是找不到这个人,还需要知道他所在的房号才可以找到这个人。 域名 因为直接记忆IP地址比较困难,所以通常使用域名访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP,客户端再根据IP地址访问服务器。 网络模型 国际标准化组织 ISO 于 1978 年提出“ 开放系统互连参考模型”, 即著名的 OSI ( Open System Interconnection )。 OSI 参考模型的推荐分层 按 TCP/IP 协议模型, 网络通常被分为一个四层模型, 这个四层模型和前面的 OSI 七层模型有大致的对应关系。 OSI 分层模型和 TCP/IP 分层模型的对应关系 常用协议 IP协议是一个分组交换,它不保证可靠传输。而TCP协议是传输控制协议,它是面向连接的协议,支持可靠传输和双向通信。TCP协议是建立在IP协议之上的,简单地说,IP协议只负责发数据包,不保证顺序和正确性,而TCP协议负责控制数据包传输,它在传输数据之前需要先建立连接,建立连接后才能传输数据,传输完后还需要断开连接。TCP协议之所以能保证数据的可靠传输,是通过接收确认、超时重传这些机制实现的。并且,TCP协议允许双向通信,即通信双方可以同时发送和接收数据。 TCP协议也是应用最广泛的协议,许多高级协议都是建立在TCP协议之上的,例如HTTP、SMTP等。 UDP协议(User Datagram Protocol)是一种数据报文协议,它是无连接协议,不保证可靠传输。因为UDP协议在通信前不需要建立连接,因此它的传输效率比TCP高,而且UDP协议比TCP协议要简单得多。 选择UDP协议时,传输的数据通常是能容忍丢失的,例如,一些语音视频通信的应用会选择UDP协议。 Java 的基本网络支持 Java 为网络支持提供了 java.net 包, 该包下的 URL 和 URLConnection 等类提供了以编程方式访问Web 服务的功能, 而 URLDecoder 和 URLEncoder 则提供了普通字符串和 application/x-www-formurlencoded MIME 字符串相互转换的静态方法。 使用 InetAddress Java 提供了 InetAddress 类来代表 IP 地址, InetAddress 下还有两个子类: Inet4Address、Inet6Address它们分别代表 Internet Protocol version 4 ( IPv4) 地 址 和 Internet Protocol version 6 ( IPv6) 地 址。InetAddress 类没有提供构造器, 而是提供了如下两个静态方法来获取 InetAddress 实例: getByName(String host) 根据主机获取对应的 InetAddress 对象。 getByAddress(byte[]addr) 根据原始 IP 地址来获取对应的 InetAddress 对象。 InetAddress 还提供了如下三个方法来获取 InetAddress 实例对应的 IP 地址和主机名。 String getCanonicalHostName() 获取此 IP 地址的全限定域名。 String getHostAddress() 返回该 InetAddress 实例对应的 IP 地址字符串(以字符串形式)。 String getHostName() 获取此 IP 地址的主机名。除此之外, InetAddress 类还提供了一个 getLocalHost()方法来获取本机 IP 地址对应的 InetAddress实例。 InetAddress 类还提供了一个 isReachable()方法, 用于测试是否可以到达该地址。 该方法将尽最大努力试图到达主机, 但防火墙和服务器配置可能阻塞请求, 使得它在访问某些特定的端口时处于不可达状态。 如果可以获得权限, 典型的实现将使用 ICMP ECHO REQUEST 否则它将试图在目标主机的端口 7 (Echo) 上 建 立 TCP 连接。 (编辑:驾考网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
