Java urlConnection.getInputStream()引发EOFEException

Java urlConnection.getInputStream()引发EOFEException,java,android,Java,Android,我正在执行以下代码,并始终在urlConnection.getInputStream()中获取EOFEException。我知道web服务器没有返回正确的标题,但是如果我在web浏览器中使用相同的url,我会返回预期的内容 URL url1; try { url1 = new URL("http://63.255.173.242/get_public_tbl.cgi?A=1"); HttpURLConnection urlConnection = (HttpURLConnecti

我正在执行以下代码,并始终在urlConnection.getInputStream()中获取EOFEException。我知道web服务器没有返回正确的标题,但是如果我在web浏览器中使用相同的url,我会返回预期的内容

URL url1;
try
{
    url1 = new URL("http://63.255.173.242/get_public_tbl.cgi?A=1");
    HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();
    try 
    {
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        readStream(in);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        urlConnection.disconnect();
    }
}
catch (MalformedURLException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}
有什么想法吗

url1 = new URL("http://63.255.173.242/get_public_tbl.cgi?A=1");
URLConnection urlConnection = url1.openConnection();
Map<String, List<String>> fields = urlConnection.getHeaderFields();
编辑1:

我想我找到了一个可能的解决办法。我发现使用Android 2.3可以通过调用getHeaderFields()读取响应(即使没有头),但是如果使用Android 4.1,getHeaderFields()返回null。有什么想法吗

url1 = new URL("http://63.255.173.242/get_public_tbl.cgi?A=1");
URLConnection urlConnection = url1.openConnection();
Map<String, List<String>> fields = urlConnection.getHeaderFields();
url1=新URL(“http://63.255.173.242/get_public_tbl.cgi?A=1");
URLConnection URLConnection=url1.openConnection();
Map fields=urlConnection.getHeaderFields();

试着像这样读取响应:

BufferedReader in = new BufferedReader(new InputStreamReader(
    response.getEntity().getContent(), "UTF-8"));

char[] buf = new char[1000];
int l = 0;
while (l >= 0) 
{
    builder.append(buf, 0, l);
    l = in.read(buf);
}
获取xml代码类GetXMLTask.java的示例代码

public class GetXMLTask
{
    public ArrayList<JSONObject> getOutputFromUrl(String url) 
    {
        ArrayList<JSONObject> output = new ArrayList<JSONObject>();
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse response;
        StringBuilder builder= new StringBuilder();
        JSONObject myjson ;
        JSONArray the_json_array;
        try 
        {
            response = httpClient.execute(httpPost);
            BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
            char[] buf = new char[1000];
            int l = 0;
                while (l >= 0) 
                {
                    builder.append(buf, 0, l);
                    l = in.read(buf);
                }
            myjson = new JSONObject("{child:"+builder.toString()+"}");
            the_json_array = myjson.getJSONArray("child");
            //System.out.println("json array length()===>>>"+the_json_array.length());//shows no of child
            for (int i = 0; i < the_json_array.length(); i++) 
            {
                JSONObject another_json_object =  the_json_array.getJSONObject(i);//the_json_array.getJSONObject(i);
                //System.out.println("json object length()"+another_json_object.length());
                    output.add(another_json_object);
            }
        } catch (ClientProtocolException e) {
            System.out.println("ClientProtocolException :"+e);
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("IOException :"+e);
            e.printStackTrace();
        } catch (JSONException e) {
            System.out.println("JSONException hussain :"+e);
            e.printStackTrace();
        }
        //System.out.println(output);
        //System.out.println(output.toString());
        return output;
    }
}
公共类GetXMLTask
{
公共ArrayList getOutputFromUrl(字符串url)
{
ArrayList输出=新的ArrayList();
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
HttpResponse响应;
StringBuilder=新的StringBuilder();
JSONObject myjson;
JSONArray_json_数组;
尝试
{
response=httpClient.execute(httpPost);
BufferedReader in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent(),“UTF-8”);
char[]buf=新字符[1000];
int l=0;
而(l>=0)
{
附加(buf,0,l);
l=英寸读数(buf);
}
myjson=newJSONObject(“{child:+builder.toString()+”}”);
_json_数组=myjson.getJSONArray(“子”);
//System.out.println(“json数组长度()===>>>”+the_json_数组长度());//不显示子元素
for(int i=0;i
您的服务器没有响应任何HTTP头,请尝试使用

emil$curl-vhttp://63.255.173.242/get_public_tbl.cgi?A=1
*即将连接()到63.255.173.242端口80(#0)
*正在尝试63.255.173.242。。。有联系的
*连接到63.255.173.242(63.255.173.242)端口80(#0)
>GET/GET\u public\u tbl.cgi?A=1 HTTP/1.1
>用户代理:curl/7.21.4(universal-apple-darwin11.0)libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
>主持人:63.255.173.242
>接受:*/*
> 
保存站点
0
纬度
-111.00
...

由于您的服务器使用的是不正确的HTTP,您不能使用URL.openConnection,但您仍然可以使用到63.255.173.242端口80的普通套接字连接并发送字符串来访问它:

GET/GET\u public\u tbl.cgi?A=1 HTTP/1.0\r\n \r\n


然后读取结果流。

您可以发布异常堆栈跟踪吗?异常堆栈跟踪为空。另请参见:尝试此
http://127.0.0.1/
,您可能需要在末尾添加一个
/
。检查该文件是否为空??或者可能是文件损坏了,您是如何得到响应的?使用httppostclient到web服务,我可以向您提供示例代码,但我只会在明天到达我的工作终端。问题是无法更改服务器。你有没有什么想法,当我的回复没有发送回标题时,我如何阅读它?在Android 2.3上,我可以使用urlConnection.getHeaderFields()获得实际响应,但在Android 4.0及以上版本中,这是不起作用的。这正是我所需要的。非常感谢。