在服务器端调用ServerSocket ss=new ServerSocket(8000,2);
while(true)
{
   ss.accpet();
}在客户端上调用
Socket s1=new Socket("localhost",8000);
System.out.println("第一次连接成功!");
Socket s2=new Socket("localhost",8000);
System.out.println("第二次连接成功!");
Socket s3=new Socket("localhost",8000);
System.out.println("第三次连接成功!");结果在客户端上打印的居然三次都成功
小弟不明白了,ServerSocket明明不是定义最长的客户端队列长度为2么?

解决方案 »

  1.   

    参见API
    ServerSocket
    public ServerSocket(int port)
                 throws IOException创建绑定到特定端口的服务器套接字。端口 0 在所有空闲端口上创建套接字。 
    传入连接指示(对连接的请求)的最大队列长度被设置为 50。如果队列满时收到连接指示,则拒绝该连接。 如果应用程序已指定服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际套接字实现。否则创建“普通”套接字。 如果存在安全管理器,则首先使用 port 参数作为参数调用其 checkListen 方法,以确保允许该操作。这可能会导致 SecurityException 异常。 
      

  2.   

    sf
    backlog是指连接的队列的长度,好像不是连接的数量 
      

  3.   

    ServerSocket ss=new ServerSocket(8000)是不是后就只有一个端口号,而没有第二个参数呢?
    看看:http://zhidao.baidu.com/question/137352021.html
      

  4.   

    backlog只是说是队列的长度,不是客户端连接数。当你的客户端向发送请求的时候可能因为服务器端的处理速度很快,刚进入队列就被服务端处理了。你3个客户端的连接可能根本达不到队列长度为2。你可以试试整个30,40个客户端,看会不会抛出异常。