String result = null;
Socket client = new Socket();
//DataInputStream inputS = null;
//PrintWriter outputS = null;
try {
client.setSoTimeout(100);
client.connect(new InetSocketAddress(irpServerIP,irpServerPort),100);
//client = new Socket(irpServerIP, irpServerPort);

DataInputStream inputS = new DataInputStream(client.getInputStream());
PrintWriter outputS = new PrintWriter(client.getOutputStream());
// System.out.println("发送:" + message);
outputS.println(message);
outputS.flush();

/*
 * StringBuffer mess = new StringBuffer(); for (int i = 0; i <
 * b.length; i++) { mess.append((char) b[i]); } result =
 * mess.toString();
 */
result = inputS.readLine();
System.out.println("接收:" + result);

outputS.close();
inputS.close();
client.close();
} catch (SocketTimeoutException e) {
if (!client.isClosed() && client.isConnected()) {
result = "-1";
System.out.println("读取数据超时!");
} else {
result = "-2";
System.out.println("连接超时!");
}
return result;
} catch (Exception e) {
result = "-3";
System.out.println("连接错误!");
return result;
}

return result;始终没有进SocketTimeoutException这个异常,麻烦各位看下!!!

解决方案 »

  1.   

    你这个好像不对称吧
    DataInputStream 好像是字节流吧~~ PrintWriter 是字符流你改成 InputStreamReader 试试自己打断点调试一下吧~~~
      

  2.   

    使用setSoTimeout(int timeout) 函数设置一下超时时间,单位是毫秒,应该就可以了
      

  3.   

    你第二行代码new Socket 里面怎么没有参数?
      

  4.   

    private static String send(String irpServerIP, int irpServerPort,
    String message, int tradeTimeOut) throws IOException {
    String result = null;
    Socket client = new Socket();
    //DataInputStream inputS = null;
    //PrintWriter outputS = null;
    try {
    client.setSoTimeout(tradeTimeOut);
    client.connect(new InetSocketAddress(irpServerIP,irpServerPort),tradeTimeOut);
    //client = new Socket(irpServerIP, irpServerPort);

    DataInputStream inputS = new DataInputStream(client.getInputStream());
    PrintWriter outputS = new PrintWriter(client.getOutputStream());
    // System.out.println("发送:" + message);
    outputS.println(message);
    outputS.flush();

    /*
     * StringBuffer mess = new StringBuffer(); for (int i = 0; i <
     * b.length; i++) { mess.append((char) b[i]); } result =
     * mess.toString();
     */
    result = inputS.readLine();
    System.out.println("接收:" + result);

    outputS.close();
    inputS.close();
    client.close();
    } catch (SocketTimeoutException e) {
    if (!client.isClosed() && client.isConnected()) {
    result = "-1";
    System.out.println("读取数据超时!");
    } else {
    result = "-2";
    System.out.println("连接超时!");
    }
    return result;
    } catch (Exception e) {
    result = "-3";
    System.out.println("连接错误!");
    return result;
    }

    return result;
    }
    其实就是这个方法,tradeTimeOut是从数据库里度的规定的超时时间,好像是30000毫秒。麻烦帮忙看下呢。
      

  5.   

    你是在本地测试的吧,那当然不会超时了;
    你可以让服务端的程序在响应之前先Thread.sleep(300);
    然后再看看!