在Android中,TCP连接周期性掉线的问题可能由多种原因引起,例如网络不稳定、服务器负载过高等。下面是一个解决该问题的示例代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TcpClient {
private static final String SERVER_IP = "your_server_ip";
private static final int SERVER_PORT = 1234;
private static final int RECONNECT_INTERVAL = 5000; // 重连间隔时间,单位为毫秒
private Socket socket;
private BufferedReader reader;
private PrintWriter writer;
private boolean isConnected;
public void connect() {
new Thread(new Runnable() {
@Override
public void run() {
try {
while (true) {
socket = new Socket(SERVER_IP, SERVER_PORT);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
isConnected = true;
// 循环读取数据
while (isConnected) {
String data = reader.readLine();
// 处理数据
}
}
} catch (IOException e) {
e.printStackTrace();
isConnected = false;
// 连接异常,等待一段时间后重连
try {
Thread.sleep(RECONNECT_INTERVAL);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
} finally {
// 关闭连接
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (writer != null) {
writer.close();
}
}
}
}).start();
}
public void sendData(String data) {
if (isConnected && writer != null) {
writer.println(data);
}
}
}
上述代码中,TcpClient
类封装了TCP连接的逻辑,通过connect
方法在新线程中建立连接并循环读取数据。如果连接异常断开,则等待一段时间后尝试重新连接。sendData
方法用于发送数据。
使用示例:
TcpClient tcpClient = new TcpClient();
tcpClient.connect();
tcpClient.sendData("Hello, server!");
请注意,上述代码仅为示例,实际使用时需根据具体需求进行修改和适配。