Android TCP客户端

Android TCP客户端,第1张

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

我目前正在开发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 } }
总结

以上是内存溢出为你收集整理的Android TCP客户端全部内容,希望文章能够帮你解决Android TCP客户端所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1105082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存