日期:2014-05-18  浏览次数:21073 次

HTTP请求自动重发问题
我有一个接受http请求的服务端,后来写了一个简单的客户端,客户端代码如下:
Java code
package com.umpay.preboss.test;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.umpay.preboss.httpServer.Socklet2HTTP;

public class HttpPostTest {
    private static Log _log = LogFactory.getLog(Socklet2HTTP.class);

    public static void main(String args[]) throws Exception {

        DataInputStream dis = new DataInputStream(new FileInputStream(
                "bin\\test.xml"));
        StringBuffer sb = new StringBuffer();

        String temp = null;
        temp = dis.readLine();
        while (temp != null) {
            sb.append(temp);
            temp = dis.readLine();
        }
        String url ="http://localhost:9000/dobusiness";

        StringBuffer sbody = new StringBuffer();
        sbody.append("$xmldata=").append(sb.toString());
        _log.debug("发送报文[" + sbody + "]");
        byte[] httpReq = sbody.toString().getBytes();
        _log.info("length = " + httpReq.length);
        URL httpurl = new URL(url);
        HttpURLConnection httpConn = (HttpURLConnection) httpurl
                .openConnection();
        //httpConn.setConnectTimeout(10000);
        httpConn.setRequestMethod("POST");
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);
        httpConn.setUseCaches(false);
        
        //httpConn.set
        String httpRes = "";
        try {
            _log.debug("urlc.send()...");
            // 发送请求
            OutputStream os = httpConn.getOutputStream();
            os.write(httpReq); // 发送body数据
            os.flush();
            os.close();
            _log.debug("urlc.recv()...");
            // 判断响应
            int rcode = httpConn.getResponseCode();
            if (rcode != HttpURLConnection.HTTP_OK) {
                throw new Exception("rcode!=HttpURLConnection.HTTP_OK");
            }
            // 接受报文体信息
            InputStream in = httpConn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            StringBuffer sb1 = new StringBuffer();
            String s = "";
            while ((s = br.readLine()) != null) {
                sb1.append(s + "\r\n");
            }
            in.close();
            System.out.println(sb1.toString());
        } catch (Exception e) {
            _log.error(e);
        } finally {
            httpConn.disconnect();
        }

    }
}


如果我的服务端没有很快的响应这个请求的话,服务端马上会收到客户端的第二次请求,客户端自动重发了一次,请教各位大虾是否碰到过这种情况,如何解决?

------解决方案--------------------
重复问题,另一个帖子已经给出解决方案!
------解决方案--------------------
另一个帖子已经有答案了,不再回复