Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android HTTPS客户端未从套接字读取数据 我正在开发一个应用程序,它将从C++服务器(目前在我的局域网上)读取SSL加密的字符串数据,并以实物形式返回信息。 我已经遵循了许多教程和许多关于PosiCyCalor提供者、自定义套接字工厂、HTTP客户端的示例,我已经到了可以将信息从模拟器发送到C++服务器的地方,但是仿真器无法从套接字读取数据。相反,我得到:_Java_Android_Ssl_Https_Httpclient - Fatal编程技术网

Java Android HTTPS客户端未从套接字读取数据 我正在开发一个应用程序,它将从C++服务器(目前在我的局域网上)读取SSL加密的字符串数据,并以实物形式返回信息。 我已经遵循了许多教程和许多关于PosiCyCalor提供者、自定义套接字工厂、HTTP客户端的示例,我已经到了可以将信息从模拟器发送到C++服务器的地方,但是仿真器无法从套接字读取数据。相反,我得到:

Java Android HTTPS客户端未从套接字读取数据 我正在开发一个应用程序,它将从C++服务器(目前在我的局域网上)读取SSL加密的字符串数据,并以实物形式返回信息。 我已经遵循了许多教程和许多关于PosiCyCalor提供者、自定义套接字工厂、HTTP客户端的示例,我已经到了可以将信息从模拟器发送到C++服务器的地方,但是仿真器无法从套接字读取数据。相反,我得到:,java,android,ssl,https,httpclient,Java,Android,Ssl,Https,Httpclient,java.net.SocketTimeoutException:读取超时 服务器识别握手和连接,并读取emulator编写的传入语句 正在异步任务线程中调用该请求 private class getXmlTask extends AsyncTask<String, String, String> { protected void onPreExecute() { pd = ProgressDialog.show(NewJobsView.this,"Retr

java.net.SocketTimeoutException:读取超时

服务器识别握手和连接,并读取emulator编写的传入语句

正在异步任务线程中调用该请求

private class getXmlTask extends AsyncTask<String, String, String> { 

    protected void onPreExecute() {
        pd = ProgressDialog.show(NewJobsView.this,"Retrieving Data","Please Wait",true,false);
        pd.setCancelable(true);

    }
    protected void onPostExecute(String XML) {
        Log.i("XML:", XML);
        parseXml();
        pd.dismiss();
    }

    @Override
    protected String doInBackground(String... params) {
        return getXml();
    }   
}
私有类getXmlTask扩展了AsyncTask{
受保护的void onPreExecute(){
pd=ProgressDialog.show(NewJobsView.this,“正在检索数据”,“请稍候”,true,false);
pd.可设置可取消(真);
}
受保护的void onPostExecute(字符串XML){
Log.i(“XML:,XML”);
parseXml();
pd.解散();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
返回getXml();
}   
}
这是我正在使用的请求类(如果有点凌乱,请原谅):

公共类HttpRequest{
MyHttpClient httpClient;
HttpContext本地上下文;
私有字符串ret;
HttpResponse响应=null;
HttpPost HttpPost=null;
HttpGet-HttpGet=null;
Context=null;
int重试=0;
公共HttpRequest(上下文c){
HttpParams params=新的BasicHttpParams();
上下文=c;
HttpConnectionParams.setConnectionTimeout(参数,60000);
HttpConnectionParams.setSoTimeout(参数,60000);
HttpProtocolParams.setContentCharset(params,HTTP.DEFAULT\u CONTENT\u CHARSET);
HttpProtocolParams.setUseExpectContinue(params,true);
httpClient=新的MyHttpClient(上下文);
setParameter(CoreProtocolPNames.PROTOCOL_VERSION,HttpVersion.HTTP_1_1);
httpClient.setParams(params);
localContext=新的BasicHttpContext();
}
公共无效中止(){
试一试{
if(httpClient!=null){
System.out.println(“中止”);
httpPost.abort();
}
}捕获(例外e){
System.out.println(“MyApp”+e);
}
}
公共字符串sendPost(字符串url、字符串数据){
返回sendPost(url、数据、空);
}    
公共字符串sendPost(字符串url、字符串数据、字符串内容类型){
ret=null;
httpPost=新的httpPost(url);
httpPost.addHeader(“用户代理”,数据);
响应=空;
stringent=null;
试一试{
ent=新实体(数据,“UTF-8”);
}捕获(不支持的编码异常e){
Log.e(“MyApp”、“HttpUtils:UnsupportedEncodingException:”+e);
}
httpPost.setEntity(ent);
试一试{
response=httpClient.execute(httpPost);
if(响应!=null){
ret=EntityUtils.toString(response.getEntity());
Log.e(“MyApp”、“HttpUtils:+ret”);
}
否则{
中止();
}
}捕获(例外e){
Log.e(“MyApp”,“HttpUtils:+e”);
}
Log.d(“MyApp”,“返回值:”+ret);
如果(重试<3次){
sendPost(url、数据);
重试=重试+1;
}
否则{
返回ret;
}
返回ret;
}  
}
其他一些注意事项:

我有

使用权限android:name=“android.permission.INTERNET”

在我的清单文件中

我还验证了SSL服务器是否正常工作,因为其他客户端(尽管是C++)能够维护连接并从套接字读取数据

MyHttpClient对象是的近似副本

我已经转动轮子很长时间了,任何回答都将不胜感激


谢谢大家!

首先检查您的URL,然后尝试使用一个建议


它比普通的httpGet要好,因为有时它会给你sockettime/ssl或任何其他io异常

首先检查你的URL,然后尝试使用一个建议


它比普通的httpGet要好,因为有时它会给您sockettime/ssl或任何其他io异常

。。。url地址是什么?10.0.2.2或localhost?到目前为止,我已经找到emulator treats(我的开发盒)并且同义,所以我使用。。。url地址是什么?10.0.2.2或localhost?到目前为止,我已经找到emulator treats(我的开发盒)和同义词,所以我使用
public class HttpRequest{

    MyHttpClient httpClient;
    HttpContext localContext;
    private String ret;

    HttpResponse response = null;
    HttpPost httpPost = null;
    HttpGet httpGet = null;
    Context context = null;   

    int retry = 0;



    public HttpRequest(Context c){
        HttpParams params = new BasicHttpParams();

        context = c;

        HttpConnectionParams.setConnectionTimeout(params, 60000);
        HttpConnectionParams.setSoTimeout(params, 60000);
        HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
        HttpProtocolParams.setUseExpectContinue(params, true);

        httpClient = new MyHttpClient(context);             

        params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);       


        httpClient.setParams(params);
        localContext = new BasicHttpContext();    
    }


    public void abort() {
        try {
            if (httpClient != null) {
                System.out.println("Abort.");
                httpPost.abort();
            }
        } catch (Exception e) {
            System.out.println("MyApp" + e);
        }
    }

    public String sendPost(String url, String data) {
        return sendPost(url, data, null);
    }    

    public String sendPost(String url, String data, String contentType) {
        ret = null; 

        httpPost = new HttpPost(url);
        httpPost.addHeader("User-Agent", data);
        response = null;               

        StringEntity ent = null;        

        try {
            ent = new StringEntity(data,"UTF-8");
        } catch (UnsupportedEncodingException e) {
            Log.e("MyApp", "HttpUtils : UnsupportedEncodingException : "+e);
        }

        httpPost.setEntity(ent);

        try {

            response = httpClient.execute(httpPost);

            if (response != null) {
                ret = EntityUtils.toString(response.getEntity());
                Log.e("MyApp", "HttpUtils: " + ret);
            }
            else{
                abort();
            }

        } catch (Exception e) {
            Log.e("MyApp", "HttpUtils: " + e);
        }

        Log.d("MyApp", "Returning value:" + ret);

        if(retry < 3){
            sendPost(url, data);
            retry = retry +1;
        }
        else{
            return ret;
        }

        return ret;

    }  

}