网络编程概述
Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。
Java提供了网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。
软件架构
-
C/S架构 全称为Client/Server结构,是指客户端和服务器的结构。常见程序有QQ,美团app、360等软件
-
B/S架构 全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有IE、谷歌、火狐。
两种架构各有优势,但无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序
网络基础
- 计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连城一个规模大、功能强的网络系统,从而使众多计算机可以方便的相互传递信息、共享硬件、软件、数据信息等资源。
- 网络编程的目的:直接或间接地通过网络协议与其他计算机实现数据交换,进行通讯
- 网络编程中有三个主要地问题:
- 如何准确的定位网络上一台或多台主机。
- 如何定位主机上地特定地应用
- 找到主机后,如何可靠、高效地进行数据传输
网络通信要素
- 通信双方地址
- IP
- 端口号
- 一定的规则:不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议,即网络通信协议。
通信要素之一:IP地址和域名
IP地址
IP地址:指互联网协议地址(Internet Protocol Address)**,俗称IP。IP地址用来给网络中的一台计算机设备做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。
IP地址分类方式一:
-
IPv4
:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d
的形式,以点分十进制
表示,例如192.168.65.100
。其中a、b、c、d都是0~255之间的十进制整数。-
这种方式最多可以表示42亿个。其中,30亿都在北美,亚洲4亿,中国2.9亿。2011年初已经用尽。
-
IP地址 = 网络地址 +主机地址
- 网络地址:标识计算机或网络设备所在的网段
- 主机地址:标识特定主机或网络设备
其中,E类用于科研。
-
-
IPv6
:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,共16个字节,写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号(:)分开。比如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
,按保守方法估算IPv6实际可分配的地址,整个地球的每平方米面积上仍可分配1000多个地址,这样就解决了网络地址资源数量不够的问题。2012年6月6日,国际互联网协会举行了世界IPv6启动纪念日,这一天,全球IPv6网络正式启动。多家知名网站,如Google、Facebook和Yahoo等,于当天全球标准时间0点(北京时间8点整)开始永久性支持IPv6访问。2018年6月,三大运营商联合阿里云宣布,将全面对外提供IPv6服务,并计划在2025年前助推中国互联网真正实现“IPv6 Only”。在IPv6的设计过程中除了一劳永逸地解决了地址短缺问题以外,还考虑了在IPv4中解决不好的其它问题,主要有端到端IP连接、服务质量(QoS)、安全性、多播、移动性、即插即用等。
IP地址分类方式二:
**公网地址( 万维网使用)**和 私有地址( 局域网使用)。192.168.开头的就是私有地址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用。
常用命令:
- 查看本机IP地址,在控制台输入:
ipconfig
- 检查网络是否连通,在控制台输入:
ping 空格 IP地址
ping 220.181.57.216
特殊的IP地址:
- 本地回环地址(hostAddress):
127.0.0.1
- 主机名(hostName):
localhost
域名
**域名解析:**因为IP地址数字不便于记忆,因此出现了域名。域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS,Domain Name System,域名系统)负责将域名转化成IP地址,这样才能和主机建立连接。
通信要素之二:端口号
网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?
如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)。
不同的进程,设置不同的端口号。
端口号:用两个字节表示的整数,它的取值范围是0~65535。
- 公认端口:0~1023。被预先定义的服务通信占用,如:HTTP(80),FTP(21),Telnet(23)
- 注册端口:1024~49151。分配给用户进程或应用程序。如:Tomcat(8080),MySQL(3306),Oracle(1521)。
- 动态/ 私有端口:49152~65535。
通信要素之三:网络通信协议
通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。
网络通信协议的目的:为了实现可靠而高效的数据传输
网络参考模型:
- OSI参考模型:将网络分为七层,过于理想化,没有实施起来
- TCP/IP参考模型:将网络分为4层:应用层、传输层、网络层、物理+数据链路层。为事实上使用的标准。
网络编程API
InetAddress类
InetAddress类主要表示IP地址,两个子类:Inet4Address、Inet6Address。
InetAddress 类没有提供公共的构造器,而是提供 了 如下几个 静态方法来获取InetAddress 实例
- public static InetAddress getLocalHost()
- public static InetAddress getByName(String host)
- public static InetAddress getByAddress(byte[] addr)
这些方法,返回的都是InetAddress类
InetAddress 提供了如下几个常用的方法
- public String getHostAddress() :返回 IP 地址字符串(以文本表现形式)
- public String getHostName() :获取此 IP 地址的主机名
- public boolean isReachable(int timeout):测试是否可以达到该地址