简体   繁体   English

多个客户端-带嵌套的一台服务器尝试不连接第二个客户端[java]

[英]Multiple Clients - One Server w/ Nested Try not connecting to 2nd client [java]

I'm trying to run two clients on a single server using nested try/catch blocks. 我正在尝试使用嵌套的try / catch块在单个服务器上运行两个客户端。 Upon running the Server class and then the Client, I get output that 'Client 1 is connected' but then it stops and seems to hang like it is waiting for Client 2. Can someone explain as to why they're not both connecting? 在运行Server类然后运行Client时,我得到的输出是“ Client 1已连接”,但随后停止并似乎像在等待Client 2一样挂起。有人能解释一下为什么他们都不同时连接吗?

//SERVER args-> 8 8 3000

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ReversiServer {
    public static void main(String[] args) throws IOException {
        if (args.length != 3) {
            System.err.println("Usage: java ReversiServer #_rows #_cols port");
            System.exit(1);
        }
        int portNumber = Integer.parseInt(args[2]);
        System.out.println("ReversiServer listening on port " + portNumber);

        try (
                ServerSocket serverSocket =
                        new ServerSocket(portNumber);
                Socket clientOneSocket = serverSocket.accept();
                BufferedReader clientOneIn = new BufferedReader(
                        new InputStreamReader(clientOneSocket.getInputStream()));
                PrintWriter clientOneOut =
                        new PrintWriter(clientOneSocket.getOutputStream(), true);
        ) {
            System.out.println("Client 1 is connected");
            try (
                    Socket clientTwoSocket = serverSocket.accept();
                    BufferedReader clientTwoIn = new BufferedReader(
                            new InputStreamReader(clientTwoSocket.getInputStream()));
                    PrintWriter clientTwoOut =
                            new PrintWriter(clientTwoSocket.getOutputStream(), true);
            ) {
                System.out.println("Client 2 is connected");
            } catch (IOException e) {
                System.out.println("Exception caught when trying to listen on port "
                        + portNumber + " or listening for a connection");
                System.out.println(e.getMessage());
            }
        } catch (IOException e) {
            System.out.println("Exception caught when trying to listen on port "
            + portNumber + " or listening for a connection");
            System.out.println(e.getMessage());
        }
    }
}

//CLIENT args-> 127.0.0.1 3000

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ReversiClient {
    public static void main(String[] args) {
        if (args.length != 2){
            System.out.println("Usage: java ReversiClient <host name> <port>");
            System.exit(1);
        }

        String hostName = args[0];
        int portNumber = Integer.parseInt(args[1]);

        System.out.println("Echo client connnecting to " + hostName + ":" + portNumber);

        try (
                Socket reversiSocket = new Socket(hostName, portNumber);
                PrintWriter outOne =
                        new PrintWriter(reversiSocket.getOutputStream(), true);
                BufferedReader inOne =
                        new BufferedReader(
                                new InputStreamReader(reversiSocket.getInputStream()));
                BufferedReader stdInOne =
                        new BufferedReader(
                                new InputStreamReader(System.in));
        ) {
            try (
                    PrintWriter outTwo =
                            new PrintWriter(reversiSocket.getOutputStream(), true);
                    BufferedReader inTwo =
                            new BufferedReader(
                                    new InputStreamReader(reversiSocket.getInputStream()));
                    BufferedReader stdInTwo =
                            new BufferedReader(
                                    new InputStreamReader(System.in));
            ) {
            } catch (IOException e) {
                System.err.println("Don't know about host " + hostName);
                System.exit(1);
            }
        } catch (IOException e) {
            System.err.println("Don't know about host " + hostName);
            System.exit(1);
        }

    }
}

Socket reversiSocket = new Socket(hostName, portNumber); initializes the connection, you do not create a new Socket for your second connection 初始化连接,您没有为第二个连接创建新的Socket

Add Socket reversiSocketTwo = new Socket(hostName, portNumber); 添加Socket reversiSocketTwo = new Socket(hostName, portNumber); to your second try block in your client, get the streams from that, and test again 到客户端的第二个try块,从中获取流,然后再次测试

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM