使用httpURLConnection转发http请求时不能获得响应信息,代码如下public void run(){
try{
/**
 * 创建BufferedReader对象读取http请求信息,
 * 和客户端的连接建立以后,服务端从Socket中获得输入流和输出流,就能与客户端交换数据。
 */
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("(2)使用BufferedReader类的对象接收网点业务电脑发送的请求信息: ");
        // 读取第一行, 请求地址
        String line=in.readLine();
        //System.out.println(line);
        String resource=line.substring(line.indexOf('/'),line.lastIndexOf('/')-5);
        //获得请求的资源的地址
        resource=URLDecoder.decode(resource, "UTF-8");//反编码 URL 地址
        System.out.println(resource);
        String method = new StringTokenizer(line).nextElement().toString();// 获取请求方法, GET 或者 POST
        
        System.out.println("(3)使用URL类和HttpURLConnection类的对象把网点业务电脑的请求转发到前置机:");
            
        URL url=new URL("Http://192.168.98.128:600");
        
        //设置此类是否应该自动执行 HTTP 重定向(响应代码为 3xx 的请求)。
            HttpURLConnection.setFollowRedirects(true);
            HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection();            
            httpURLConnection.setRequestMethod("POST");
            //httpURLConnection.setInstanceFollowRedirects(true);
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            
            httpURLConnection.getOutputStream().write(resource.getBytes("UTF-8"));
            httpURLConnection.getOutputStream().flush();
            httpURLConnection.getOutputStream().close();
            //*****************************程序执行到此不再向下执行******************************
            
            //System.out.println("responseMessage: " + httpURLConnection.getResponseMessage());
            try{
                         
             System.out.println("responseCode=" + httpURLConnection.getResponseCode());
             //if (httpURLConnection.getResponseCode()==HttpURLConnection.HTTP_OK)
             // System.out.println("--- 转发程序和通讯前置机建立Http连接成功 ---");
             InputStream inDis=httpURLConnection.getInputStream();
             in.close();
            
             BufferedReader br = new BufferedReader(new InputStreamReader(inDis)); 
             String text="";
             System.out.println("(4)使用BufferedReader类的对象读取通讯前置机Http连接返回的信息");
             System.out.println("(5)使用BufferedWriter类的对象将通讯前置机Http连接返回信息转发给网点业务电脑");
             BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            
             try{
             while((text = br.readLine())!= null){
             //打印测试信息 
                     System.out.println(text);
                     //写入单个字符
                     bw.write(text);
                     //刷新该流的缓冲
                     bw.flush();
                 } 
             }catch(IOException e){
             e.printStackTrace();
             }finally{
             br.close(); //关闭BufferedReader类的对象
             //bw.close(); //关闭BufferedWriter类的对象
             }
            }catch(IOException e){
             e.printStackTrace();
            }finally{
             System.out.println("--- 断开Http转发服务器和通讯前置机的Http连接--- ");
             System.out.println("===================================================================");            
             httpURLConnection.disconnect();
            }
}catch(IOException e){
try{
socket.close();
System.out.println("--- 释放转发线程占有的socket资源 ---");
}catch(IOException ex){
ex.printStackTrace();
}
e.printStackTrace();
}
}

解决方案 »

  1.   

    有没有具体的错误信息啊?
    另外,代码里获得inputStream后不要马上关闭,你的代码:
    // System.out.println("--- 转发程序和通讯前置机建立Http连接成功 ---"); 
    InputStream inDis=httpURLConnection.getInputStream(); 
    in.close(); //??--网络回传的数据还没有得到就已经关闭,可能这里有问题
      

  2.   

    有没有具体的错误信息啊?
    另外,代码里获得inputStream后不要马上关闭,你的代码:
    // System.out.println("--- 转发程序和通讯前置机建立Http连接成功 ---"); 
    InputStream inDis=httpURLConnection.getInputStream(); 
    in.close(); //??--网络回传的数据还没有得到就已经关闭,可能这里有问题
      

  3.   

    to fbchen,没有错误信息,程序执行到下面的语句就不再向下执行了,并且没有报任何异常信息。我跟踪了一下,执行任务的线程执行完这条语句就stepping了,
    httpURLConnection.getOutputStream().close(); 
                //*****************************程序执行到此不再向下执行****************************** 我看看 下面的语句有没有问题。
    InputStream inDis=httpURLConnection.getInputStream(); 
    in.close();