Java网络编程中匿名端口
前置知识
客户端Socket
通过IP地址和端口号与服务器建立连接,通过InputStream读取服务器响应的数据,向客户展示。
public Socket() 创建未连接的Socket
public Socket(Proxy proxy) 通过中间代理进行Socket连接
protected Socket(SocketImpl impl) throws SocketException 创建了客户端Socket和服务器端Socket
public Socket(String host, int port) throws UnknownHostException, IOException
服务器端Socket
通过端口号绑定后,监听客户端请求,提供响应。
在初始化ServerSocket时,有三个构造函数:
public ServerSocket() throws IOException
public ServerSocket(int port) throws IOException
public ServerSocket(int port, int backlog) throws IOException
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
- baklog:入站链接的请求队列长度
- InetAddress:指定特定的本地IP地址
- port:指定端口
Socket:通过IP与端口来表示唯一的应用程序。
为什么要指定IP:因为一个主机可能有多个网卡,会存在多个IP,指定了IP就使得绑定了唯一的应用程序,否则可能会同时监听IP1:3306、IP2:3306、…·
什么是匿名端口
源于服务器端Socket(ServerSocket)端口指定。其中端口可以传入0,这样系统会为我们选择可用的端口号。这样子由系统指定的端口就称为匿名端口。对于多Socket协议很有用。
多Socket:一个ServerSocket给多个客户端Socket返回数据。
如被动FTP:,客户端连接到服务器的21端口(由服务器指定),之后传输文件的时候,服务器开始监听所有可用端口,就可以让系统分配数据返回的端口,然后服务器只要告诉客户端Socket去连接该端口获取数据即可。这种情况下,服务器就不必提前知道不同会话使用的数据端口。
主动FTP:由客户端监听服务器与之连接的临时端口,而不是由服务器监听。