第一次连接后,Java SSLSocket InputStream read()会阻塞

时间:2015-03-28 00:43:40

标签: java sockets ssl

我有一个简单的程序,可以创建多个SSL Socket连接到服务器,发送回简单的文本数据。第一个ssl连接工作正常。在我创建到同一服务器和端口的第二个ssl连接后,执行将在read()调用时阻塞。如果我创建多个单独的程序,每个程序只执行一个连接并并行运行它,它工作正常。所以服务器可以处理多个并行连接。就在我从同一个程序创建多个连续连接时,read()块。在打开第二个连接之前关闭第一个连接。还有一件事,当服务器和客户端在同一台机器上运行时,我无法重现这个问题,只有当服务器远程运行时才会发生。有什么建议/想法是怎么回事?任何输入都非常感谢。

public static int getPort(String agentHost, int agentPort, String token) {
int port_num = 0;
 InputStream in = null;
 BufferedWriter out = null;
 SSLSocket s = null;
try {
    s = (SSLSocket) SSLSocketFactory.getDefault().createSocket(agentHost, agentPort);
    String message = token;

    out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    out.write(message);
    out.flush();

    in =s.getInputStream();
    byte[] buffer = new byte[32];
    System.out.println("Waiting on read");
    int bytes_read = in.read(buffer);
    System.out.println("read " + bytes_read + " bytes" );
    if(bytes_read > 0) {
        String port_s = new String(buffer, 0, bytes_read, "UTF-8");   // if the charset is UTF-8  
        port_s = port_s.trim();
        port_num = Integer.parseInt(port_s);
    } 
    else 
        System.out.println("------Error in call---------");
    }  
 catch ( IOException e) {
    e.printStackTrace();
 }
 finally {
     try {
         if(s != null) s.close();
         } catch (IOException e) {
                e.printStackTrace();
         }
 }
return port_num;    

}

0 个答案:

没有答案