【问题标题】:I need the client to be able to receive multiple messages from the server我需要客户端能够从服务器接收多条消息
【发布时间】:2019-09-16 19:04:04
【问题描述】:

我正在处理基本的客户端-服务器连接。 此代码完美运行,但客户端在关闭连接之前只能发送 1 条消息并接收其修改。 我怎样才能让它发送和接收多条消息?

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

下面的代码是一个客户端向服务器发送一个字符串,服务器把它变成大写。

//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() + '\n';
           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 + '\n'); 
        modifiedSentence = inFromServer.readLine(); 

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

这段代码的输出是:

Enter characters to be capitalized: hi
FROM SERVER: HI

【问题讨论】:

    标签: java sockets server connection client-server


    【解决方案1】:

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

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

    【讨论】:

    • 我不是试图将多个用户连接到同一个服务器,我需要在同一个客户端和服务器之间发送多条消息,而不关闭连接。
    • @R.Bassil,但问题与我提到的相同。每次迭代你的服务器都在等待接受一个新的客户端。如果您只想接受一个客户端,请在 while 循环之前执行此操作。
    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多