分享

Android TCP客户端

 印度阿三17 2019-09-03

我目前正在开发Android中的tcp客户端.
我想将我的Android设备连接到计算机上的tcp服务器,并每2秒接收一次数据.问题是由于我在tcp客户端中实现的while循环,我正在关闭我的应用程序.
我尝试以不同的方式编写将使tcp客户端检查服务器套接字的循环,但没有成功.如何制作一个循环来检查服务器套接字而不关闭力?

这是我目前正在使用的代码:

    public class Connection implements Runnable {
    @Override
    public void run() {         
        try {                    
            sk=new Socket(server,port);
            viewsurface.setText("connected");       
            flag = true;
        } catch (UnknownHostException e) {      
            viewsurface.setText("failed 1 socket");
            flag = false;
        } catch (IOException e) {                   
            viewsurface.setText("failed 2 socket");
            flag = false;
        }

        while (flag == true){               
            try {
                checkin = sk.getInputStream();
                checkint = checkin.available();

                if (checkint > 0){
                    try {
                        BufferedReader in = new BufferedReader(new InputStreamReader(sk.getInputStream()));
                        received = in.readLine();
                        viewsurface.setText(received);

                    } catch (IOException e) {
                        viewsurface.setText("failed to receive");
                    }
                }

            Thread.sleep(2000);
            } catch (IOException e) {
                viewsurface.setText("checkin failed");

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
}

}

解决方法:

在任何人提供合适的帮助之前,你需要粘贴你所获得的异常以使力量关闭.

但有些建议可能会解决问题.

>最有可能是问题,viewText.setText只能从UI线程调用.有很多方法可以解决这个问题.您可以使用AsyncTask,或者如果您有一个Activity引用,则可以使用runOnUIThread并传入一个调用setText的runnable.
>移动checkin = sk.getInputStream();在循环之前.没有理由在循环中的每个循环中获得strem.
>不要在循环中的每个循环中创建BufferedReader.在循环之前移动它
> .sleep(2000)并不能完全保证2秒.

我有一些代码格式问题所以我道歉.

 private class DownloadFilesTask extends AsyncTask<Void, String, Void> {
     protected Long doInBackground(Void... nothing) {
         try {                    
            sk=new Socket(server,port);
        publishProgress("connected");       
            flag = true;
    } catch (UnknownHostException e) {      
        publishProgress("failed 1 socket");
        flag = false;
    } catch (IOException e) {                   
        publishProgress("failed 2 socket");
        flag = false;
    }

    while (flag == true){               
        try {
            checkin = sk.getInputStream();
            checkint = checkin.available();

            if (checkint > 0){
                try {
                    BufferedReader in = new BufferedReader(new InputStreamReader(sk.getInputStream()));
                    received = in.readLine();
                    publishProgress(received);

                } catch (IOException e) {
                    publishProgress("failed to receive");
                }
            }

        Thread.sleep(2000);
        } catch (IOException e) {
            updateProgress(

        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    return;
 }

 protected void onProgressUpdate(String... progress) {
    viewsurface.setText(progress[0]);
 }

 protected void onPostExecute(Void result) {
     //nothing
 }

 }
来源:https://www./content-4-437851.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多