对于Uni的项目,我们正在构建一个非常简单且基本的分布式数据存储。因此,我们从基本的客户端-服务器连接开始,该连接工作得很好。 该项目的下一部分是将多个服务器连接在一起,以便(最后)每个服务器将负责不同范围的存储数据。
我写了一个非常小的方法,可以在服务器和其他所有服务器之间创建一个新的套接字。我们被指示在尝试连接服务器之前,让服务器有时间启动。
但是该方法不断抛出java.net.ConnectException: Connection refused (Connection refused)
。
static void connectToOtherServers(int myPort) {
for (int i = 0; i < ports.length; i++) {
boolean isConnected = false;
while (!isConnected) {
try {
if (myPort != ports[i]) {
Socket socket = new Socket(addresses[i], ports[i]);
sockets.add(socket);
isConnected = true;
}
else if (myPort == ports[i]) {
isConnected = true;
}
} catch(IOException e) {
e.printStackTrace();
try {
Thread.sleep(1000);
System.out.println("sleeping");
} catch(Exception e2) {
e2.printStackTrace();
}
}
}
}
}
该类的构造函数已经有一个监听传入连接的套接字。
public App (int port) throws IOException {
selector = Selector.open();
heineStore = new HeineStore();
// Setup server socket for listening
serverSocket = ServerSocketChannel.open();
serverSocket.socket().bind(new InetSocketAddress(port));
serverSocket.configureBlocking(false);
// Register acceptor for OP_ACCEPT events
SelectionKey key = serverSocket.register(selector, SelectionKey.OP_ACCEPT);
key.attach(new Acceptor(heineStore));
}
希望大家对如何解决此问题有建议。
编辑:我尝试将客户端连接到第一台服务器,然后启动所有其他服务器(其他三台服务器),它们都连接到第一台服务器(与客户端建立连接),但是它们陷入了循环同时尝试彼此连接。 不过,该项目的要求之一是,首先要建立服务器之间的连接,然后才连接到客户端。