【问题标题】:Server doesn't detect second client connecting服务器未检测到第二个客户端连接
【发布时间】:2020-12-23 04:57:29
【问题描述】:

我遇到的问题是,当我打开第二个客户端时,服务器似乎没有检测到第二个客户端已打开。第一次打开客户端时,它工作正常,服务器检测到客户端已连接。

服务器:

public class Server {

Socket previousSocket = null;

private static int port = 9001;

public static void main(String[] args) throws Exception {
    ServerSocket serverSocket = new ServerSocket(port);
    System.out.println("[SERVER] Server successfully launched on port: " + port);
    
    DatagramSocket UDPSocket = new DatagramSocket(9002);
    
    Socket previousSocket = null;
    while (true) {
        Socket newSocket = serverSocket.accept();

       System.out.println("new client connected");
        
        
        if (previousSocket == null) { 
            previousSocket = newSocket;
            
            System.out.println("1 st client");
            
            
        } else {
            System.out.println("2 nd client");
            previousSocket = null;
        }
       
       
        byte[] data = new byte[500];
        DatagramPacket received = new DatagramPacket(data, data.length);
        
        while(true) {
            UDPSocket.receive(received);
            
            String receivedData = new String(received.getData());
            
            System.out.println(receivedData);
        }
    }
}
}

客户:

public ChatClient() throws UnknownHostException, IOException {

    Socket socket = new Socket("127.0.0.1", 9001);

    Scanner scanner = new Scanner(System.in);
    
    DatagramSocket UDPSocket = new DatagramSocket();
    
    while(scanner.hasNextLine()) {
        String message = scanner.nextLine();
        InetAddress ip = InetAddress.getByName("127.0.0.1");
                
        DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, ip, 9002);
        UDPSocket.send(packet);
    }
}

【问题讨论】:

  • 调用UDPSocket.receive(received); 的内部while(true) 永远不会退出,因此外部循环中的serverSocket.accept(); 只调用一次。虽然您显然只使用端口 9002 发送和接收数据,但为什么首先在端口 9001 上有一个 ServerSocket?

标签: java tcp udp client-server


【解决方案1】:

下面的循环永远不会结束,这就是你的问题的原因

        while(true) {
            UDPSocket.receive(received);
            
            String receivedData = new String(received.getData());
            
            System.out.println(receivedData);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 2013-12-26
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多