[英]Read and write from a socket simultaneously
我正在用Java编写一个android应用,我想创建一个监听器,它可以在while(true)
循环中接收消息,并且还能够将消息发送到服务器。 对于此任务,我使用带有asyncTask
套接字。 我编写了一个connectionHandler
类,该类处理我的应用程序的所有发送和接收请求。
到目前为止,一切都很顺利,一次只能发送和接收一条消息,但我只是找不到一种同时完成消息的方法。
我需要在线程中执行以下代码,但是我不知道该怎么做,因为我必须返回String
:
public static String receive() {
try {
return mConnectionHandler.new AsyncReceiveFromServer().execute()
.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}
private class AsyncReceiveFromServer extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
String result = null;
try {
result = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
当我在while(true)
循环中运行receive函数while(true)
,我无法发送消息,因为...execute().get()
阻塞了Java类connectionHandler
。
因此,总而言之,我如何以线程或任何其他异步方式执行以上代码? 或者,也许您还有其他建议在接收是while(true)
循环的同时运行发送和接收?
首先,永远不要使用execute.get()。 如果您认为需要使用它,那么您就构造错了-它破坏了使用线程让调用线程等待结果的全部目的。 如果仅调用execute,则将在另一个线程上运行并正常工作。 如果需要多个同时真正运行的线程,请使用executeOnExecutor()重写AsyncTask的4.0共享线程池机制。
或更妙的是-不要为此使用AsyncTask。 您想永久运行某些东西,等待来自远程连接的输入。 这比AsyncTask更适合Thread。 我会选择一个线程,并在该线程中构建while循环,并让该线程仅在连接关闭时终止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.