java - 如何使用服务器套接字在Java中一次监听一个客户端?

标签 java sockets networking

import java.io.*;
import java.net.*;
class MultiServer
{
    public static void main(String[] args) throws IOException
    {
        ServerSocket serverSock=new ServerSocket(3000);
        //server socket creation

        System.out.println("waiting for client.........");
          
        Socket socket=serverSock.accept();

        System.out.println("client connected ");

        BufferedReader keyRead=new BufferedReader(new 

        inputStreamReader(System.in));
        OutputStream ostream=socket.getOutputStream();//sending to client
        PrintWriter pw=new PrintWriter(ostream,true);
        InputStream istream=socket.getInputStream();//receiving from server (istream object)
        BufferedReader receiveRead=new BufferedReader(new 
        InputStreamReader(istream));
        String receiveMessage,sendMessage;
        while(true)
        {
            if((receiveMessage=receiveRead.readLine())!= null)
            {
                System.out.println("client:>"+ receiveMessage);
            }
 
            sendMessage=keyRead.readLine();
            pw.println(sendMessage);
            System.out.flush();//flush the Stream
            if(sendMessage.equals("bye"))
            {
                break;
            }  
        }
    }
}

此代码是一次连接一个客户端,但我想显示一条消息,说明如果其他客户端尝试与同一服务器聊天,则服务器正忙。该消息应该在双方上都有响应。

最佳答案

i want to display a message that the server is busy if other client attempts to chat with the same server. that message should respond on both the side

基本上不可能。 listen() 积压队列将导致后续客户端的连接尝试完成,并排队等候服务器的下一次 accept() 调用。在准备好接受下一个客户端之前,除了关闭监听套接字之外,您无能为力,这会引入各种计时限制。

你可以在有一个客户端时设置一个标志,并在接受另一个客户端时检查它,然后向他发送消息并断开他的连接,但我不明白这一点。

that message should respond on both sides

两边是什么?新客户这边还有谁?

奇怪的要求。聊天服务器怎么可能只需要一个客户端?他在和谁聊天?

关于java - 如何使用服务器套接字在Java中一次监听一个客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35125054/

相关文章:

java - 使用remove(<index>)或remove(<objectRef>)从ArrayList中删除项目

java - 如何在 Java 中安全地停止和恢复线程?

java - 为什么会出现此错误 :java.net.PlainSocketImpl.checkNotClosed(PlainSocketImpl.java :116)?

Java - ServerSocket IP 地址

c++ - Linux C++ TCP 套接字 - 启用阻塞模式

networking - 谷歌云如何计算导出和入口流量?

java - 如何使用 Spring boot 构建非阻塞异步 Web 服务

Java ZK WebContent/img 的完整路径

python - 如何通过 Python Socket 发送原始 XML 而不是字节数据?

python - 如何以智能方式将UDP客户端消息发送到UDP服务器解析消息