首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让Java TCP服务器和客户端应用程序循环,直到发出一定数量的请求

如何让Java TCP服务器和客户端应用程序循环,直到发出一定数量的请求
EN

Stack Overflow用户
提问于 2018-09-16 01:28:15
回答 1查看 816关注 0票数 0

我已经用eclipse编写了TCP服务器和TCP客户端应用程序。客户端获取字符串形式的用户输入,然后将其发送到服务器,服务器将其大写,然后再将其发回。它们需要保持循环,直到服务器收到一定数量的请求,在这种情况下,它关闭套接字之间的连接并停止。不幸的是,它似乎只循环一次。我将在代码之后提供我正在讨论的内容的示例输出。

import java.io.*;
import java.net.*;


public class TCPServer {

public static void main(String argv[]) throws Exception {
    String clientSentence;
    String capitalizedSentence;
    ServerSocket welcomeSocket = new ServerSocket(6789);
    int requests = 0;
    while (true) {
        Socket connectionSocket = welcomeSocket.accept();
        BufferedReader inFromClient = new BufferedReader (new InputStreamReader( connectionSocket.getInputStream()));
        DataOutputStream outToClient = new DataOutputStream (connectionSocket.getOutputStream());
        do {

            clientSentence = inFromClient.readLine();
            capitalizedSentence = clientSentence.toUpperCase() + '\n';
            outToClient.writeBytes(capitalizedSentence);
            outToClient.flush();
            requests++;
        }
        while(requests < 10);
        outToClient.writeBytes("REQUEST LIMIT REACHED");

        }

}

}

和客户端

import java.io.*;
import java.net.*;

public class TCPClient {

public static void main(String argv[]) throws Exception {
    String sentence;
    String modifiedSentence;
    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
    //Creates socket, replace the hostnmae/ip address with the ipaddress of the computer running the server application.
    Socket clientSocket = new Socket("10.69.88.130", 6789);
    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
    BufferedReader inFromServer = new BufferedReader(new InputStreamReader (clientSocket.getInputStream()));
    do {
        System.out.print("TO SERVER: ");
        sentence = inFromUser.readLine();
        outToServer.writeBytes(sentence + '\n');
        outToServer.flush();
        modifiedSentence = inFromServer.readLine();
        System.out.println("FROM SERVER: " + modifiedSentence);
    }
    while (!modifiedSentence.equals("REQUEST LIMIT REACHED"));
    System.out.println(modifiedSentence);
    clientSocket.close();
    }

}

最后,我得到的输出

TO SERVER: testa
FROM SERVER: TESTA
TO SERVER: testb
(nothing else is displayed after this line)
EN

回答 1

Stack Overflow用户

发布于 2018-09-16 02:43:49

好的,你的代码正在工作(某种程度上)。运行成功后,无需重启服务器即可重启客户端。您的request-value不会重置为0,并且在重新启动客户端后,您的客户端为您的服务器发出的第一个请求是10。那么,为什么会有这样的请求呢?因为你先冲洗绳子然后再检查你的计数器。

我对你的服务器做了一点修改。也许这就是你要找的?

import java.io.*;
import java.net.*;


public class TCPServer {

    public static void main(String argv[]) throws Exception {
        String clientSentence;
        String capitalizedSentence;
        ServerSocket welcomeSocket = new ServerSocket(6789);
        int requests = 0;
        while (true) {
            Socket connectionSocket = welcomeSocket.accept();
            BufferedReader inFromClient = new BufferedReader (new InputStreamReader( connectionSocket.getInputStream()));
            DataOutputStream outToClient = new DataOutputStream (connectionSocket.getOutputStream());
            while (requests < 10) {

                clientSentence = inFromClient.readLine();
                capitalizedSentence = clientSentence.toUpperCase();
                outToClient.writeBytes(capitalizedSentence + " Request: " + requests +  '\n');
                outToClient.flush();
                requests++;
            }
            outToClient.writeBytes("REQUEST LIMIT REACHED");
            requests = 0;
        }

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52347176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档