我正在设计一个全面的Android程序,包括5个节点:
虽然我遇到的问题是,如果5个节点按以下顺序启动:1-2-3-4-5,Node2将不接受Node1的tcp连接请求,因为Node2的启动时间晚于1。
为了解决这个问题,我尝试使用isConnected()
,但即使只启动了Node1,它也会返回true
。
所以我的问题是如何在3个Android节点之间建立一个全对的TCP连接。
附上我的代码:
private class ClientTask extends Thread {
Socket[] s1 = new Socket[5];
@Override
public void run() {
int flag=1;
for (int i = 0; i < 5; i++) {
if(flag==0) i--;
try {
System.out.println("Begin making connections!");
//s1[i] = new Socket(InetAddress.getByAddress(new byte[]{10, 0, 2, 2}),REMOTE_PORT[i]);
s1[i] = new Socket();
s1[i].connect(new InetSocketAddress("10.0.2.2", REMOTE_PORT[i]),1000);
flag=1;
} catch (UnknownHostException e) {
System.out.println("ClientTask UnknownHostException");
flag=0;
} catch (IOException e) {
//Error happens when set_redir.py is not run
System.out.println("ClientTask socket IOException");
flag=0;
}
}
}
}
服务器的代码:
public class ServerTask extends Thread {
ServerSocket serverSocket = null;
public void run() {
System.out.println("Start listening!");
Socket socket = null;
try {
serverSocket = new ServerSocket(10000);
} catch (IOException e) {
System.out.println("Error when creating serversocket!");
}
int flag=1;
for (int i = 0; i < 5; i++) {
if(flag==0) i--;
try {
// waiting for incoming socket
socket = serverSocket.accept();
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
try{
out.writeBytes("You are connected to avd: " + (myPort-11108)/4);
}catch (IOException e){
System.out.println("Error here!");
}
flag=1;
// new thread for the full TCP connection
System.out.println("Receiving new TCP connection from " + socket.getRemoteSocketAddress());
tt[i] = new tcpThread(socket, i);
tt[i].start();
} catch (IOException e) {
System.out.println("ERROR: server socket");
flag=0;
}
}
System.out.println("End listening...");
}
}
答案 0 :(得分:-1)
在从Stackoverflow和google进行一些研究之后,我找到了检测服务器是否在线脱机的方法。我正在撰写以下注释以防其他人在将来面临同样的问题:&gt;
我们可以使用isConnected()
而不是使用true
,只要连接确实是由客户端发出的,read()
总是readLine()
或read()
。
-1
将返回readLine()
,原因是连接丢失,服务器关闭等。
-1
将一直在计时,与上述情况相同。
因此我们可以检查返回值是readLine()
还是超时{{1}}来检查TCP连接的状态。