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

时间:2016-02-01 07:29:54

标签: 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 objehect)
        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;
            }  
        }
    }
}

此代码是一次连接客户端,但是如果其他客户端尝试与同一服务器聊天,我想显示服务器正忙的消息。该消息应该双方都做出回应。

1 个答案:

答案 0 :(得分:1)

  

如果其他客户端尝试与同一服务器聊天,我想显示服务器正忙的消息。该消息应该在双方都做出回应

基本上不可能。 listen()积压队列将导致后续客户端的连接尝试完成,并排队等待服务器的下一次accept()呼叫。在您准备好接受下一个客户端之前,没有什么可以解决关闭侦听套接字的问题,这会引入各种时序约束。

您可以在拥有客户端时设置一个标志,并在接受另一个客户端时进行检查,并向他发送消息并断开连接,但我没有看到这一点。

  

该消息应该双方都做出回应

双方都有什么关系?新客户的一面还有谁?

奇怪的要求。聊天服务器如何只需要一个客户端?他和谁聊天?