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类封装对网络资源的标识访问,用ServerSocketSocket类实现面向连接的网络通信,用DatagramPacketDatagramSocket实现数据报的收发。

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

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!