Android 如果服务器关闭,TCPsending会使应用程序崩溃
我为我们的全球Leadbord编写了一个服务器,现在它实际上可以工作了。 如果它处于活动状态,我可以向它发送数据。但如果它关闭了,我的应用程序不会停止。我没有找到解决办法,希望你能帮我。这是发送邮件的地址:Android 如果服务器关闭,TCPsending会使应用程序崩溃,android,tcp,client,Android,Tcp,Client,我为我们的全球Leadbord编写了一个服务器,现在它实际上可以工作了。 如果它处于活动状态,我可以向它发送数据。但如果它关闭了,我的应用程序不会停止。我没有找到解决办法,希望你能帮我。这是发送邮件的地址: public void saveToDatabase(LeadboardElement element2) { final LeadboardElement element = element2; send = false; // Need to be a threa
public void saveToDatabase(LeadboardElement element2) {
final LeadboardElement element = element2;
send = false;
// Need to be a thread! else android blocks it because it could take to
// long to send!
this.thread = new Thread() {
public void run() {
try {
Socket soc = new Socket(Config.TCP_SERVERNAME_IP,
Config.TCP_PORT);
DataOutputStream out = new DataOutputStream(
soc.getOutputStream());
DataInputStream in = new DataInputStream(
new BufferedInputStream(soc.getInputStream()));
// to call the save statement!
out.writeInt(0);
// give the stuff
out.writeUTF(element.getName());
out.writeInt(element.getLevel());
out.writeInt(element.getKillPoints());
// close it
out.close();
in.close();
soc.close();
send = true;
//join at every error
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
};
// start it
thread.start();
// join thread
if (!send) {
boolean retry = true;
while(retry)
try {
this.thread.join();
retry = false;
Log.w(TAG, "sending to server stopped!");
} catch (InterruptedException e2) {
Log.w(TAG, "Thread could not be joined");
}
}
}
我注意到,从API 5开始,我需要在一个线程中执行它,所以它的工作方式是这样的。如果玩家触摸屏幕,则在游戏结束时调用。一切都停止,数据被发送到服务器。如果他倒下了,它就不起作用了,我们陷入了黑色的淡入状态。
我想我需要暂停一下。我用了一个倒数计时器来尝试,但这并不能解决问题
非常感谢 更改初始化套接字的方式,可以设置超时
Socket s1 = new Socket();
s1.setSoTimeout(200);
s1.connect(new InetSocketAddress("192.168.1." + i, 1254), 200);
很抱歉我没有找到解决方案。非常感谢您的快速帮助,它修复了它!