一、网络编程
- 网络模型:OSI参考模型,TCP/IP参考模型
- 网络通讯要素:IP地址,端口号,传输协议
二、网络模型
- OSI:Open System Interconnection,开放式系统互联参考模型
- TCP/IP:Transmission Control Protocol/Internet Protocol的简写,
- 中译名为传输控制协议/因特网互联协议,又名网络通讯协议,
- 是Internet最基本的协议、Internet国际互联网络的基础,
- 由网络层的IP协议和传输层的TCP协议组成。
三、网络通信要素
- IP地址(InetAddress):网络中设备的标识,不易记忆,可用主机名
- 本地回环地址:127.0.0.1主机名:localhost
- 端口号:用于标识进程的逻辑地址,不同进程的标识
- 有效端口:0-65535,其中0-1024系统使用或保留端口
- 传输协议:通讯的规则,常见协议:TCP UDP
- UDP:User Datagram Protocol用户数据包协议
- 是 OSI 参考模型中一种无连接的传输层协议
- 提供面向事务的简单不可靠信息传送服务
- IETF RFC 768是UDP的正式规范
四、java对IP的描述:java.net.InetAddress类
- 软件包 java.net 为实现网络应用程序提供类
- InetAddress类表示互联网协议 (IP) 地址。
- IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。
public class InetAddress implements Serializable
{
//没有构造函数
//返回此 InetAddress 对象的原始 IP 地址。结果按网络字节顺序:地址的高位字节位于 getAddress()[0] 中
public byte[] getAddress(){}
//在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组
public static InetAddress[] getAllByName(String host)
throws UnknownHostException{}
//在给定主机名的情况下确定主机的 IP 地址。
public static InetAddress getByName(String host)
throws UnknownHostException{}
//返回 IP 地址字符串(以文本表现形式)
public String getHostAddress(){}
//获取此 IP 地址的主机名
public String getHostName(){}
//返回本地主机
public static InetAddress getLocalHost()
throws UnknownHostException{}
//将此 IP 地址转换为 String。返回的字符串具有以下形式:主机名/字面值 IP 地址
public String toString(){}
}
五、TCP,UDP,Socket
UDP
- 将数据及源和目的封装在数据包中,不需要建立连接
- 每个数据报的大小限制在64k内
- 因无连接,是不可靠协议
- 不需要建立连接,速度快
- UDP就如同邮寄包裹
TCP
- 建立连接,形成传输数据的通道
- 在连接中进行大数据量传输
- 通过三次握手完成连接,是可靠协议
- 必须建立连接,效率会稍低
- TCP就如同打电话
Socket
- Socket就是为网络服务提供的一种机制
- 通信的两端都有Socket
- 网络通信其实就是Socket间的通信
- 数据在两个Socket间通过IO传输
六、SocketAddress
- 此类表示不带任何协议附件的 Socket Address。
- 作为一个抽象类,应通过特定的、协议相关的实现为其创建子类。
- 它提供不可变对象,供套接字用于绑定、连接或用作返回值。
- 没有任何方法,除了默认的和继承自Object的,类里面是空的
public abstract class SocketAddress implements Serializable{}
七、InetSocketAddress
- 此类实现 IP 套接字地址(IP 地址 + 端口号)。
- 它还可以是一个对(主机名 + 端口号),在此情况下,将尝试解析主机名。
- 如果解析失败,则该地址将被视为未解析 地址,但是其在某些情形下仍然可以使用,比如通过代理连接。
- 它提供不可变对象,供套接字用于绑定、连接或用作返回值。
- 通配符 是一个特殊的本地 IP 地址。它通常表示“任何”,只能用于 bind 操作
public class InetSocketAddress extends SocketAddress
{
//根据 IP 地址和端口号创建套接字地址
public InetSocketAddress(InetAddress addr,
int port){}
//创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值
public InetSocketAddress(int port){}
//根据主机名和端口号创建套接字地址,尝试将主机名解析为 InetAddress。如果尝试失败,则将地址标记为未解析
public InetSocketAddress(String hostname,
int port){}
//获取 InetAddress。
public final InetAddress getAddress(){}
//获取 hostname。
public final String getHostName(){}
//获取端口号
public final int getPort(){}
}