【发布时间】:2015-08-26 11:22:21
【问题描述】:
我有 java 客户端服务器应用程序。服务器正在运行或可能未连接。但我们需要连接ip和端口。
Socket s=new Socket(ip,port);
如果已连接,则将创建套接字,否则将抛出 IOException。然后我将该连接的状态设置为未在对象中连接。
如果连接,我将发送数据作为命令。它将用数据响应该命令。我们使用输出流发送命令并使用套接字的输入流读取响应。
当服务器可用(有线或wifi连接)时,我需要自动重新连接到服务器。
这里如何使用多线程
例如:
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ConnectionThread implements Runnable {
static class ConnectionStatus {
boolean connected = false;
public boolean isConnected() {
return connected;
}
public void setConnected(boolean connected) {
this.connected = connected;
}
}
ConnectionStatus status;
Socket socket;
String ip;
int port;
public ConnectionThread(ConnectionStatus status, String ip, int port) {
this.status = status;
this.ip = ip;
this.port = port;
}
public void connectAgain() throws IOException {
while (!status.isConnected()) {
socket = new Socket(ip, port);
status.setConnected(true);
}
}
public void run() {
try {
connectAgain();
} catch (IOException e) {
try {
Thread.sleep(1000);
connectAgain();
} catch (InterruptedException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
public static void main(String[] args) {
ConnectionStatus status = new ConnectionStatus();
status.setConnected(false);
ConnectionThread cthread = new ConnectionThread(status, "192.166.102.201", 1986);
Thread x = new Thread(cthread);
x.start();
System.out.println("Connected ..." + status.isConnected());
}
}
只有在连接时才需要发送命令(数据)以接收响应。
我需要在未连接时将连接状态设置为 false 并在连接时为真。
根据连接状态,我将从套接字读取或写入套接字流。
我需要知道连接何时失败 以及连接可用时。
我认为更改连接的属性时最好使用 propertychangelistener。
对吗?
【问题讨论】:
标签: java multithreading sockets