目录
1. 套接字介绍
套接字是介于传输层(TCP/UDP)和应用层(HTTP/FTP)之间的一个抽象;
在java环境中套接字编程主要使用TCP/IP协议,但是套接字支持的协议族远不止这些;
在java套接字编程中有Socket和ServerSocket两个核心类,ServerSocket位于服务器端监听连接,Socket位于客户端发起连接,服务器端监听到连接后也会产生一个Socket实例来完成与对端Socket的通信,并且服务器端的Socket和客户端的Socket没有任何区别,也就是说进程间通信需要一对套接字完成;
2. 套接字API
Socket和ServerSocket是java提供网络编程的门面接口,实际上都是通过SocketImpl及子类完成的;
java支持TCP和UDP两种协议的套接字编程,本文所有介绍只涉及TCP部分;
2.1 关系图
2.2 类介绍
1. InetAddress
InetAddress是java对IP地址的封装,包括IP设备的名称、ip地址,有Inet4Address和Inet6Address两个子类;
没有公开的构造方法,只能通过公开的静态方法实例化对象;
方法介绍
1)getByName(String host):实例化一个InetAddress对象,getByName的参数可以是ip地址字符串,也可以是主机名;
2)anyLocalAddress():实例化一个表示任何本地地址的网络地址,通常是0.0.0.0;
3)getHostAddress():一般通过InetAddress的获取主机ip地址串,通过获取主机名;
4)getHostName() :获取ip地址的主机名;
2. SocketAddress/InetSocketAddress
套接字地址,用来表示一个套接字在网络中的位置;
SocketAddress不依赖任何协议的套接字地址;
InetSocketAddress表示一个IP套接字地址,由套接字地址的 IP地址(InetAddress)、主机名和端口号组成;
3. ServerSocket
服务器套接字,在服务器端用于监听网络传入
构造方法
1)ServerSocket():创建一个不绑定任何ip和端口的服务器套接字
创建一个SocksSocketImpl赋值给ServerSocket的SocketImpl,并把自己赋值给SocketImpl的ServerSocket;
2)ServerSocket(int port, int backlog,InetAddress bindAddr):用指定的端口、连接大小、ip地址创建一个服务器套接字
同无参构造,创建SocksSocketImpl并相互赋值;
根据port和InetAdd