我需要客户端能够从服务器接收多条消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要客户端能够从服务器接收多条消息相关的知识,希望对你有一定的参考价值。

我正在进行基本的客户端 - 服务器连接。此代码完美地工作,但客户端只能发送1条消息并在关闭连接之前接收其修改。如何才能发送和接收多条消息?

我想过使用while循环但我不知道如何正确实现它。我需要能够发送多条消息才能获得一致的连接

下面的代码是一个客户端向服务器发送字符串,服务器将其转换为大写。

//Server:
public class TCPServer {

    public static void main(String argv[]) throws Exception 
    {
       String clientSentence;
       String capitalizedSentence;

       ServerSocket welcomeSocket = new ServerSocket(6789);
       while(true)
                    {
           Socket connectionSocket = welcomeSocket.accept(); 

           BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
           DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 

           clientSentence = inFromClient.readLine();

           capitalizedSentence = clientSentence.toUpperCase() + '
';
           outToClient.writeBytes(capitalizedSentence);

           if(clientSentence.toUpperCase().trim().contentEquals("QUIT")) {
               connectionSocket.close();
               }
           }
       }
    }

//Client:
public class TCPClient {

    public static void main(String argv[]) throws Exception
    { 
        String sentence;
        String modifiedSentence;
        Socket clientSocket = new Socket("LocalHost", 6789);

        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        System.out.print("Enter characters to be capitalized: ");
        sentence = inFromUser.readLine(); 
        outToServer.writeBytes(sentence + '
'); 
        modifiedSentence = inFromServer.readLine(); 

        System.out.println("FROM SERVER: " + modifiedSentence);
        }
    }

此代码的输出是:

Enter characters to be capitalized: hi
FROM SERVER: HI
答案

您的服务器只能从每个客户端获取一条消息,因为在您的while循环中,在每次迭代中您都会调用welcomeSocket.accept()。这意味着您的服务器代码会停止,直到它获得新的客户端连接。

如果您希望服务器支持多个客户端,请考虑使用多线程。例如,看看:on this post

以上是关于我需要客户端能够从服务器接收多条消息的主要内容,如果未能解决你的问题,请参考以下文章

XMPP 客户端接收服务器消息

从服务器接收多个 sendto()

TCP客户端(java)没有从TCP服务器(C#)接收消息

在线程中保存核心数据

将 redis 用于 pub-sub 时不需要的多条消息

发送UDP广播,接收多条消息