为啥客户端不能一次又一次地获取输入;它只是在一个输入和一个来自服务器的响应后变为空白?
Posted
技术标签:
【中文标题】为啥客户端不能一次又一次地获取输入;它只是在一个输入和一个来自服务器的响应后变为空白?【英文标题】:Why can't the client obtain input again and again; it just goes blank after one input and one response from the server?为什么客户端不能一次又一次地获取输入;它只是在一个输入和一个来自服务器的响应后变为空白? 【发布时间】:2021-12-05 15:05:28 【问题描述】:客户端
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ThreadClient
public static void main(String[] args) throws IOException
final String HOST = "127.0.0.1";
final int PORT = 4040;
System.out.println("Client started.");
Socket socket = new Socket("127.0.0.1", 4040);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Scanner in = new Scanner(socket.getInputStream());
Scanner s = new Scanner(System.in);
while (true)
System.out.print("Input: ");
String input = s.nextLine();
System.out.println("Sent: " + input);
out.println(input);
while(!"End".equals(input))
System.out.println("Echoed from server: " + in.nextLine());
服务器端
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ThreadServer
public static void main(String[] args) throws IOException
final int PORT = 4040;
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("Server started...");
System.out.println("Wating for clients...");
while (true)
Socket clientSocket = serverSocket.accept();
Thread t = new Thread()
public void run()
try
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
Scanner in = new Scanner(clientSocket.getInputStream());
while (in.hasNextLine())
String input = in.nextLine();
if (input.equalsIgnoreCase("exit"))
break;
else if(input.equals("Hi"))
out.println("How are you?");
else if(input.equals("Bye"))
out.println("Thankyou! Have a good day!");
else if (input != null)
try
String numbers;
numbers = input.replaceAll("[^0-9]", "");
int number = Integer.parseInt(numbers);
out.println("The line is being printed");
for (int i = 0; i < number; i++)
out.println(input.replaceAll("[^a-z,^A-Z]", ""));
catch (Exception e)
e.printStackTrace();
else
out.println("Sorry!");
catch (IOException e)
;
t.start();
try
Thread.sleep(2000L);
catch (InterruptedException xInterrupted)
// Ignore.
我在客户端添加一个输入,它从服务器获得响应,但是当我尝试插入另一个时,它变为空白,表明它不接受来自客户端的任何进一步输入。那么,有人能指出我在这段代码中哪里出错了吗?
【问题讨论】:
while(!"End".equals(input))
if 而不是while
吗?一旦进入该循环,它将永远不会停止,因为您不会更改循环体内的输入。因此,一旦条件为真,它将永远保持为真
@OHGODSPIDERS 你能指导我对代码进行哪些更改,就像你说的那样,而不是 while 循环,我应该使用 if,但是在哪里,以及它里面的什么条件
@OHGODSPIDERS 如果我使用“if”而不是 while,它不会为服务器端的最后一个 else if 条件提供正确的输出结果。
【参考方案1】:
您可能陷入了嵌套的 while 循环。输入在嵌套的 while 循环内永远不会改变,所以你永远不会逃脱。
while (true)
System.out.print("Input: ");
String input = s.nextLine();
System.out.println("Sent: " + input);
out.println(input);
while(!"End".equals(input)) // <-- Why the while loop?
System.out.println("Echoed from server: " + in.nextLine());
修复它的一个方法是用这个替换 while(true)
循环:
System.out.print("Input: ");
String input = s.nextLine();
while (!"End".equals(input))
System.out.println("Sent: " + input);
out.println(input);
System.out.println("Echoed from server: " + in.nextLine());
System.out.print("Input: ");
String input = s.nextLine();
【讨论】:
我试过这段代码,但它没有按我要求的方式工作。以上是关于为啥客户端不能一次又一次地获取输入;它只是在一个输入和一个来自服务器的响应后变为空白?的主要内容,如果未能解决你的问题,请参考以下文章