Java 异步任务:连接到tcp服务器并发送字符串,关闭连接

Java 异步任务:连接到tcp服务器并发送字符串,关闭连接,java,android,tcpclient,Java,Android,Tcpclient,我是android开发的初学者 当使用异步任务单击按钮时,我必须执行以下操作 使用ip和端口连接到特定的TCP服务器,并检查其是否已连接? 失败时显示toast消息 成功时,向tcp服务器发送字符串 关闭连接 我使用了下面的代码进行连接 try { s= new Socket("192.168.43.205",20108); out = new BufferedWriter( new OutputStreamWriter(s.getOutputStream()))

我是android开发的初学者

当使用异步任务单击按钮时,我必须执行以下操作

  • 使用ip和端口连接到特定的TCP服务器,并检查其是否已连接? 失败时显示toast消息
  • 成功时,向tcp服务器发送字符串
  • 关闭连接
我使用了下面的代码进行连接

  try
  {
     s= new Socket("192.168.43.205",20108);
     out = new BufferedWriter( new OutputStreamWriter(s.getOutputStream()));
     BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

  }
  catch (UnknownHostException e) {
     tv.setText(e.toString());
     Log.v("Tcp", e.toString());
   } 
   catch (IOException e) {
      tv.setText(e.toString());
      Log.v("Tcp",e.toString());
   }
   catch (Exception e) {
      tv.setText(e.toString());

   }

但这通常在服务器不可用时挂起。是否对此进行了修复?

使用AsyncTask建立连接并检索数据

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.content.Context;
import android.os.AsyncTask;

public class SendDataAsync extends AsyncTask<String, Void, String> {

    Context mContext;

    public SendDataAsync(Context context){
        this.mContext = context;
    }

    @Override
    protected String doInBackground(String... params) {

        String str = params[0];
            .
            .
            .

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost("YOUR_URL");
        httpPost.addHeader("Content-type", "application/x-www-form-urlencoded");
        BasicNameValuePair strBasicNameValuePair = new BasicNameValuePair("str", str);
            .
            .
            .


        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        nameValuePairList.add(strBasicNameValuePair);
            .
            .
            .


        try {

            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList);
            httpPost.setEntity(urlEncodedFormEntity);

            try {

                HttpResponse httpResponse = httpClient.execute(httpPost);
                InputStream  inputStream = httpResponse.getEntity().getContent();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                StringBuilder stringBuilder = new StringBuilder();
                String  bufferedStrChunk = null;
                while((bufferedStrChunk = bufferedReader.readLine()) != null){
                    stringBuilder.append(bufferedStrChunk);
                }

                return stringBuilder.toString();

            } catch (ClientProtocolException cpe) {
                System.out.println("Client Protocol Exception :" + cpe);
                cpe.printStackTrace();
            } catch (IOException ioe) {
                System.out.println("IO Exception :" + ioe);
                ioe.printStackTrace();
            }

        } catch (UnsupportedEncodingException uee) {
            System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee);
            uee.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
        this.cancel(true);
    }


}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.UnsupportedEncodingException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入android.content.Context;
导入android.os.AsyncTask;
公共类SendDataAsync扩展AsyncTask{
语境;
公共SendDataAsync(上下文){
this.mContext=上下文;
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串str=params[0];
.
.
.
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“您的URL”);
addHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
BasicNameValuePair strBasicNameValuePair=新的BasicNameValuePair(“str”,str);
.
.
.
List nameValuePairList=新的ArrayList();
nameValuePairList.add(strBasicNameValuePair);
.
.
.
试一试{
UrlEncodedFormEntity UrlEncodedFormEntity=新的UrlEncodedFormEntity(nameValuePairList);
setEntity(urlEncodedFormEntity);
试一试{
HttpResponse HttpResponse=httpClient.execute(httpPost);
InputStream InputStream=httpResponse.getEntity().getContent();
InputStreamReader InputStreamReader=新的InputStreamReader(inputStream);
BufferedReader BufferedReader=新的BufferedReader(inputStreamReader);
StringBuilder StringBuilder=新的StringBuilder();
字符串bufferedStrChunk=null;
while((bufferedStrChunk=bufferedReader.readLine())!=null){
追加(bufferedStrChunk);
}
返回stringBuilder.toString();
}捕获(客户端协议异常cpe){
System.out.println(“客户端协议异常:+cpe”);
printStackTrace();
}捕获(ioe异常ioe){
System.out.println(“IO异常:+ioe”);
ioe.printStackTrace();
}
}捕获(不支持的编码异常uee){
System.out.println(“由于UrlEncodedFormEntity参数:“+uee”而给出的异常);
uee.printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
}
@凌驾
受保护的void onCancelled(){
super.onCancelled();
这个。取消(true);
}
}

使用AsyncTask建立连接并检索数据

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.content.Context;
import android.os.AsyncTask;

public class SendDataAsync extends AsyncTask<String, Void, String> {

    Context mContext;

    public SendDataAsync(Context context){
        this.mContext = context;
    }

    @Override
    protected String doInBackground(String... params) {

        String str = params[0];
            .
            .
            .

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost("YOUR_URL");
        httpPost.addHeader("Content-type", "application/x-www-form-urlencoded");
        BasicNameValuePair strBasicNameValuePair = new BasicNameValuePair("str", str);
            .
            .
            .


        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        nameValuePairList.add(strBasicNameValuePair);
            .
            .
            .


        try {

            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList);
            httpPost.setEntity(urlEncodedFormEntity);

            try {

                HttpResponse httpResponse = httpClient.execute(httpPost);
                InputStream  inputStream = httpResponse.getEntity().getContent();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                StringBuilder stringBuilder = new StringBuilder();
                String  bufferedStrChunk = null;
                while((bufferedStrChunk = bufferedReader.readLine()) != null){
                    stringBuilder.append(bufferedStrChunk);
                }

                return stringBuilder.toString();

            } catch (ClientProtocolException cpe) {
                System.out.println("Client Protocol Exception :" + cpe);
                cpe.printStackTrace();
            } catch (IOException ioe) {
                System.out.println("IO Exception :" + ioe);
                ioe.printStackTrace();
            }

        } catch (UnsupportedEncodingException uee) {
            System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee);
            uee.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
        this.cancel(true);
    }


}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.UnsupportedEncodingException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入android.content.Context;
导入android.os.AsyncTask;
公共类SendDataAsync扩展AsyncTask{
语境;
公共SendDataAsync(上下文){
this.mContext=上下文;
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串str=params[0];
.
.
.
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“您的URL”);
addHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
BasicNameValuePair strBasicNameValuePair=新的BasicNameValuePair(“str”,str);
.
.
.
List nameValuePairList=新的ArrayList();
nameValuePairList.add(strBasicNameValuePair);
.
.
.
试一试{
UrlEncodedFormEntity UrlEncodedFormEntity=新的UrlEncodedFormEntity(nameValuePairList);
setEntity(urlEncodedFormEntity);
试一试{
HttpResponse HttpResponse=httpClient.execute(httpPost);
InputStream InputStream=httpResponse.getEntity().getContent();
InputStreamReader InputStreamReader=新的InputStreamReader(inputStream);
BufferedReader BufferedReader=新的BufferedReader(inputStreamReader);
StringBuilder StringBuilder=新的StringBuilder();
字符串bufferedStrChunk=null;
while((bufferedStrChunk=bufferedReader.readLine())!=null){
追加(bufferedStrChunk);