我目前正在开发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客户端所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)