1. 基础网络知识概念
学习网络通信编程学习之前,先要对相关知识概念有一定了解。
IP地址:处于网络上的每一个设备都有一个唯一的标识(地址),这就是IP。
端口(Port):一个设备上可能有多个需要通信的对象(应用程序),为了在一个唯一的IP地址上找到正确的对象,需要给每个对象分配唯一的端口(0-65535,其中0-1013为系统保留)。
IP加端口(组成Socket)就可以正确的在网络上的你需要的对象了。
协议:找到你需要交流的对象后,这时就需要大家语言相通,否则都不知道对方在说啥了,因此需要一个语言标准,方便大家交流,这就是协议,当下用的就是随处可闻的TCP/IP协议了。
TCP/IP协议:
五层模型:
1.网络接口层(链路层):负责接收IP数据包并通过网络发送。
2.网络层(互联层):负责相邻计算机之间的通信,主要IP协议。
3.传输层(主机到主机层):提供应用程序间的通信,主要TCP、UDP协议。
4.应用层:向用户提供常用的应用程序,比如电子邮件、文件传输访问、远程登录等。主要协议有FTP、TELNET、DNS、SMTP、NFS、HTTP。
因为里面包含了很多网络通信协议,因此还叫TCP/IP协议族(栈),用这些协议中最常用的两个协议(均处于传输层)来命名。
TCP:Transmission Control Protocol 传输控制协议。
IP:Internet Protocol 互联网协议。
2. Java的网络通信功能
Java提供了4个常用类,来针对不同的网络通信层次进行处理:
InetAddress:用于标识处理网络上的硬件资源,表示IP地址。
URL:统一资源定位符,通过它可以访问处理网络上的资源数据,由协议名称加资源名称构成,中间冒号隔开。
Socket:使用TCP协议实现网络通信的类。
Datagram:使用UDP协议,将通信内容放在数据报中,进行网络通信。
2.1 InetAddress应用
此类没有构造方法,但是提供了一些静态方法获取实例。
import java.net.*;
public class InetAddressTest{
public static void main(String[] args) throws UnknownHostException{
//获取本机的信息
InetAddress address = InetAddress.getLocalHost();
//通过主机名或者IP地址获取信息
//InetAddress address2 = InetAddress.getByName("my-pc");
InetAddress address2 = InetAddress.getByName("192.168.0.104");
System.out.println("计算机名:"+address.getHostName());
System.out.println("IP地址:"+address.getHostAddress());
System.out.println("address对象:"+address);