一.网络编程概述:
1.1 软件结构:
- C/S结构:全称为Client/Server结构、是指客户端和服务器结构。常见的程序有QQ、迅雷等软件。
- 缺点:开发周期长,维护成本高。因为有客户端和服务器端,客户端如APP等又分为安卓和IOS开发,需要投入更多的人力物力,增加了成本。
- 优点:部分运算交给客户端执行,减少了服务器端的压力。
- B/S结构:全称为Browser/Server结构,是指浏览器和服务器结构。常见的浏览器有谷歌、火狐等。
- 缺点:所有的运算交给服务器做,服务器所需要承受的压力大。
- 优点:只开发服务器端,节省了开发成本,开发周期短,维护成本低。
- 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机之间的数据传输。
二、网络通讯的三要素:
- IP地址
- 端口号
- 通信协议
1.2.1 IP地址:
- IP地址:网络设备的唯一标识。通过IP地址可以找到对应的计算机。
- 常见的IP地址分类:
- IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d 的形式,例如192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整数,那么最多可以表示大约43亿个。
- IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。
有资料显示,全球IPv4地址在2011年2月分配完毕。为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 ,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。
- 常用命令:
- 查看本机IP地址,在控制台(cmd)输入:ipconfig
- 检查网络是否连通,在控制台输入:ping 空格 IP地址 ping 220.181.57.216
- 特殊的IP地址:本机IP地址: 127.0.0.1 、localhost 。
1.2.2 如何解决IPV4地址值不足的问题?
- 通过局域网共用一个外网IP地址可以解决这个问题,我们可以这样去理解,假设某个学校有一万台电脑,我们需要通过一个路由器上网,共用一个外网的IP地址,学校内部的局域网分配一个唯一的IP地址。
1.2.2 端口号:
- 端口号概述:就是一个十进制的整数。
- 端口号作用:进程的唯一标识,每一个程序都会有一个端口号。
- 取值范围:0到65535.
- 注意事项:0到1024以下的端口号是系统保留使用的,程序员要使用1024以上的端口号。
- 其中,0~1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。
1.2.3 协议:
- 协议概述:用来规定计算机与计算机之间数据传输的格式。
- 分类:UDP和TCP协议。
- 网络通讯的三要素总结:通过IP找主机,通过端口号找程序,通过协议确定如何传输数据。
1.3 IP地址类之InetAddress:
- InetAddress类概述:一个该类的对象就代表一个IP地址。无构造方法,有静态方法,可以直接通过类名调用。
- InetAddress类静态方法:
- static InetAddress getLocalHost();
获得本地主机IP地址对象(获得自己的)
- static InetAddress getByName(String host);
根据主机名或IP地址字符串获得IP地址对象 (获得别人的)
- InetAddress类成员方法:
- String getHostName(); 获得主机名
- String getHostAddress(); 获得IP地址字符串
import java.net.InetAddress;
import java.net.UnknownHostException;
public class inetAddressDemo01 {
public static void main(String[] args) throws UnknownHostException {
//获得本地主机IP地址对象
InetAddress ip01 = InetAddress.getLocalHost();
//主机/IP地址字符串
System.out.println(ip01.getHostName());//DESKTOP-PS8I3T1
System.out.println(ip01.getHostAddress());//192.168.61.1
//根据主机名或IP地址字符串获得IP地址对象
InetAddress ip02 = InetAddress.getByName("192.168.43.1");
System.out.println(ip02);// /192.168.43.1
}
}