Java 网络编程基础
本文最后更新于:2024年3月18日 凌晨
Java 网络编程基础
网络协议
- 网络上的计算机要互相通信,必须遵守一定的协议,目前使用最广泛的网络协议是应用于Internet的TCP/IP协议,TCP/IP协议在设计上分为5层:物理层,数据链路层,网络层,传输层,应用层,不同层有各自的职责,下层为上层提供服务。
- 网络层也称IP层,主要负责网络主机的定义,实现数据传输的路由选择,IP地址可以唯一地确定Internet上的一台主机,为了方便记忆,实际应用中常用域名地址,域名与IP地址的转换通过域名解析完成。
- 传输层负责保证端到端数据传输的正确性,在传输层包含两类典型通信协议:TCP和UDP
- TCP是传输控制协议的简称,是一种面向连接的保证可靠传输的协议,通过TCP协议传输,得到的是一个顺序的无差错的数据流,使用TCP通信,发送方和接收方首先要建立Socket连接,在客户/服务器通信中,服务方在某个端口提供服务等待客户方的访问连接,连接建立后,双方就可以发送或接收数据。
- UDP是用户数据报协议的简称,UDP无须建立连接,传输效率高,但不能保证传输的可靠性。
- 现在计算机系统都是多任务的,一台计算机可以同时与多个计算机之间通信,所以完整的网络通信的构成元素除了主机地址外,该包括通信端口,协议等。
- 在
java.net
包中提供了丰富的网络功能,例如用InetAddress
类表示IP地址,用URL类封装对网络资源的标识访问,用ServerSocket
和Socket
类实现面向连接的网络通信,用DatagramPacket
和DatagramSocket
实现数据报的收发。
InetAddress类
- Internet上通过IP地址或域名标识主机,而
InetAddress
对象则含有这两者的信息,域名的作用是方便记忆,它和IP地址是一一对应的,知道域名即可得到IP地址,InetAddress
对象用表示主机的信息的格式:www.ecjtu.jx.cn==201.101.208.10
- InetAddress类不对外提供构造方法,但提供了一些静态方法来得到InetAddress类的实例对象,该类的常用方法如下:
static InetAddredd getByName(String host)
:根据主机名构造一个对应的InetAddress对象,但主机在网上找不到时,将抛出UnknownHostException异常。
static InetAddress getLocalHost()
:返回本地主机对应的InetAddress对象。
String getHostAddress()
:返回InetAdress对象的IP地址。
String getHostName()
:返回InetAdress对象的域名。
1 2 3 4 5 6 7 8 9 10 11
| class TestInetAddress { public static void main(String[] args) throws UnknownHostException { InetAddress baidu= InetAddress.getByName("www.baidu.com"); InetAddress local= InetAddress.getLocalHost();
System.out.println(local); System.out.println(baidu); System.out.println(baidu.getHostAddress()); System.out.println(baidu.getHostName()); } }
|
1 2 3 4
| Cian-MacBook-Pro.local/127.0.0.1 www.baidu.com/36.152.44.96 36.152.44.96 www.baidu.com
|
InetSocketAddress类
1 2 3 4 5 6 7 8
| class TestInetAddress { public static void main(String[] args) { InetSocketAddress baidu = new InetSocketAddress("www.baidu.com", 8080); InetAddress baiduAddress = baidu.getAddress(); System.out.println(baidu); System.out.println(baiduAddress); } }
|
1 2
| www.baidu.com/36.152.44.96:8080 www.baidu.com/36.152.44.96
|