android tcp 客户端程序,Android 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 {

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.icode9.com/content-4-437851.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值