套接字编程-将多个服务器连接在一起

时间:2019-08-17 12:33:20

标签: java sockets nio serversocket

对于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));
}

希望大家对如何解决此问题有建议。

编辑:我尝试将客户端连接到第一台服务器,然后启动所有其他服务器(其他三台服务器),它们都连接到第一台服务器(与客户端建立连接),但是它们陷入了循环同时尝试彼此连接。 不过,该项目的要求之一是,首先要建立服务器之间的连接,然后才连接到客户端。

0 个答案:

没有答案