Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重复使用同一服务器套接字时出现问题_Java_Sockets - Fatal编程技术网

Java 重复使用同一服务器套接字时出现问题

Java 重复使用同一服务器套接字时出现问题,java,sockets,Java,Sockets,我已经实现了以下代码来创建SSL服务器套接字 public void createConnection(){ port =8888; listen = true; isSvrRuning = true; try { String KEYSTORE = Config.KEYSTORE_FILE; // String KEYSTORE = "/u04/app/

我已经实现了以下代码来创建SSL服务器套接字

    public void createConnection(){
     port =8888;
    listen = true;
            isSvrRuning = true;
            try {


                String KEYSTORE = Config.KEYSTORE_FILE;
                // String KEYSTORE = "/u04/app/ato/data/keystore/ATradSvrKeyStore";
                char[] KEYSTOREPW = "abcd".toCharArray();
                char[] KEYPW = "abcd".toCharArray();
                com.sun.net.ssl.TrustManagerFactory tmf;

                boolean requireClientAuthentication;

                java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
                java.security.KeyStore keystore = java.security.KeyStore.getInstance(
                        "JKS");
                keystore.load(new FileInputStream(KEYSTORE), KEYSTOREPW);

                com.sun.net.ssl.KeyManagerFactory kmf = com.sun.net.ssl.KeyManagerFactory.getInstance("SunX509");
                kmf.init(keystore, KEYPW);

                com.sun.net.ssl.SSLContext sslc = com.sun.net.ssl.SSLContext.getInstance("SSLv3");
                tmf = com.sun.net.ssl.TrustManagerFactory.getInstance("sunx509");
                tmf.init(keystore);

                sslc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
                SSLServerSocketFactory ssf = sslc.getServerSocketFactory();

                ssocket = (SSLServerSocket) ssf.createServerSocket();
                try {
                    ssocket.setReuseAddress(true);
                } catch (SocketException ex) {
                    loggerSvr.log(Level.SEVERE, "SocketException in setting timeout for serverSocket.");
                    ex.printStackTrace();
                }
                ssocket.bind(new InetSocketAddress(port));
                ssocket.setNeedClientAuth(true);
                while (listen) {
                    //wait for client to connect//
                    socket = ssocket.accept();
        // here goes the code which need to handle a new connection
    }

}catch(){
//there are several catch blocks to catch all checked exceptions
}
}
如果上述套接字中存在问题或异常,我将关闭该套接字,并通过调用上述方法重新创建另一个服务器套接字。但问题是,有时我无法使用相同的端口重新创建服务器套接字。当我尝试这样做时,它会给出以下错误

Server socket allocation error for the specific port
我在创建套接字时也设置了可重用属性。有人能告诉我问题出在哪里吗

特定端口的服务器套接字分配错误

这不是Java异常消息。这来自代码中未公开的点。如果setReuseAddress()失败,从打印的错误消息的准确性判断,它可能与实际的错误情况没有任何关系。当您调用setReuseAddress(true)时,我发现这不太可能是绑定问题。您必须告诉我们实际的异常和错误消息

这里有一个寓意:不要编造自己的错误信息;使用异常中提供的一个


此外,该代码已过期十年。所有com.sun.net.ssl.*内容都应该替换为javax.net.ssl.*并且您不需要添加提供程序@自从JDK1.3以后,我终于可以解决这个问题了。但问题出在其他地方。以上代码没有任何arror。代码的初始实现者没有公开真正的错误。这就是为什么我不明白。请原谅我的问题

谢谢您对EJP的评论。正如您所说,问题不在这段代码中。最初实现上述代码的人并没有公开真正的异常。因此,我也无法确定实际的arror最初在哪里。实际的问题是在其他地方。下一次我将确保指出实际的错误。我还注意到上面代码中使用的大多数方法都不推荐使用。你能告诉我上面的代码有什么样的风险吗。再次感谢您的评论