我是这个论坛的新人。我在Android中用线程创建了一个TCP客户端。此代码适用于我的应用:
class TCPClient extends Thread
{
String add;
public TCPClient(String IPa)
{
add=IPa;
}
public void run()
{
try
{
InetAddress serverAddr = InetAddress.getByName(add);
socket = new Socket(serverAddr, SERVERPORT);
//write part: i write to server
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.print("INIT");
out.flush();
//read part: I receive a message from server
byte[] bytes = new byte[1000];
StringBuilder x = new StringBuilder();
int numRead = 0;
if ((numRead = socket.getInputStream().read(bytes)) >= 0)
{
x.append(new String(bytes, 0, numRead));
}
if(x.toString().equals("INIT_ACK"))
//position_req();
getActivity().runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(getActivity().getApplicationContext(),"Connesso",Toast.LENGTH_LONG).show();
}
});
}
catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
但我有这个问题:服务器可能会在70秒后回答,所以我需要等待一个控制器并听取服务器是否给我答复。 我该怎么做? 谢谢你的回答。
答案 0 :(得分:0)
socket.setSoTimeout(70*1000);
所以,你的方法会很好。我在2009年做的第一款Android应用程序使用了这种方法。许多应用程序,架构师和团队讨厌它,并希望各种各样的AsyncTask绕着WRT处理它如何处理线程,并快速发展到几个月前我们的高价移动咨询公司签约放弃Async任务并转到线程模型。大声笑。他们使用Otto代替runOnUIThread,但是使用相同的差异。 祝你好运!