我在android开发中,遇到一个Socket的问题,我怎么可以保持服务器的永久连接呢,服务器发一段时间的数据之后,出现丢失连接。但是我代码里没有关闭socket,什么都没有关闭。 我在cmd 用telnet连接时候,服务器发一段时间后,在cmd提示说:失去了跟主机的连接。这种情况怎么解决?望指点。怎么在如下代码中改进,谢谢!代码如下:
// =====================准备数据线程========================
// 新建一个线程连接服务器得到数据
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
String message = "request" + "\r\n";
try {
socket = new Socket(SERVERIP, SERVERPORT);
out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(message);
out.println(message);
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()), 1024 * 10);
msg = br.readLine();
while (true) {
msg = br.readLine();
Message mess = new Message();
mess.obj = msg;
mess.what = 1;
handler.sendMessage(mess);
}
} catch (Exception e) {
Log.i("errors",e.toString());
}
}
}); // 启动线程
thread1.start();
handler = new Handler() {
public void handleMessage(Message mess) {
switch (mess.what) {
case 1:
msg = (String) mess.obj;
s = msg.split(" ");
for (int i = 0; i < fillMaps.size(); i++) {
HashMap<String, String> map = fillMaps.get(i);
if (map.get("forex").equals(s[0])) {
if (!(map.get("bid").equals(s[1]))) {
map.put("bid", s[1]);
map.put("ask", s[2]);
} else if (!(map.get("ask").equals(s[2]))){
map.put("ask", s[2]);
}
}
}
showCurrencyPair();
break;
default:
break;
}
}
};
}
// =====================准备数据线程========================
// 新建一个线程连接服务器得到数据
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
String message = "request" + "\r\n";
try {
socket = new Socket(SERVERIP, SERVERPORT);
out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(message);
out.println(message);
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()), 1024 * 10);
msg = br.readLine();
while (true) {
msg = br.readLine();
Message mess = new Message();
mess.obj = msg;
mess.what = 1;
handler.sendMessage(mess);
}
} catch (Exception e) {
Log.i("errors",e.toString());
}
}
}); // 启动线程
thread1.start();
handler = new Handler() {
public void handleMessage(Message mess) {
switch (mess.what) {
case 1:
msg = (String) mess.obj;
s = msg.split(" ");
for (int i = 0; i < fillMaps.size(); i++) {
HashMap<String, String> map = fillMaps.get(i);
if (map.get("forex").equals(s[0])) {
if (!(map.get("bid").equals(s[1]))) {
map.put("bid", s[1]);
map.put("ask", s[2]);
} else if (!(map.get("ask").equals(s[2]))){
map.put("ask", s[2]);
}
}
}
showCurrencyPair();
break;
default:
break;
}
}
};
}
或者你可以定时发送心跳包。以确认连接存在,不存在就重连,再发送数据