我有一个问题一直不明白,一个端口能够建立多少个 Socket 连接?
我的感觉好像只有一个,但是为什么一个服务端程序能够在一个端口建立那么多连接呢
?
比如说一个 HTTP 服务同时在 80 端口和非常多的客户端建立持续的 Socket 连接,这
是怎么回事呢?
下面是我的测试程序:
ServerPort.java
---------------
import java.net.*;
public class ServerPort
{
public static void main(String args[]){
ServerSocket serv_so = null;
try{
System.out.println("Server started ...");
serv_so = new ServerSocket(8088);
while (true){
new ServerAdaper(serv_so.accept()).run();
}
}catch(Exception ex){
System.out.println("Exception raised: " + ex.getMessage());
}finally{
if (serv_so != null) try{serv_so.close();}catch(Exception ex){}
}
}
}
class ServerAdaper extends Thread
{
Socket so = null;
public ServerAdaper(Socket socket){
so = socket;
}
public void run(){
InetAddress addr = so.getInetAddress();
System.out.println("\nClient connectted: " + addr.getHostAddress());
System.out.println("Remote port: " + so.getPort());
System.out.println("Local port: " + so.getLocalPort());
try{
this.sleep(2000L);
so.close();
System.out.println("Server closed ...");
}catch(Exception ex){
ex.printStackTrace();
}
}
}
Client.java
-----------
import java.net.*;
public class Client
{
public static void main(String args[]){
Socket so = null;
try{
so = new Socket("liuyang", 8088);
System.out.println("Client start.");
System.out.println("Socket connected. ");
System.out.println("Remote port: " + so.getPort());
System.out.println("Local port: " + so.getLocalPort());
new Thread().sleep(2000L);
}catch(Exception ex){
System.out.println("Exception raised: ");
ex.printStackTrace();
}finally{
if (so != null)try{so.close();}catch(Exception ex){ex.printStackTrace();}
}
}
}