gpt4 book ai didi

java - 为什么我无法通过此套接字发送文本?

转载 作者:行者123 更新时间:2023-11-29 03:19:27 24 4
gpt4 key购买 nike

这是我拥有的服务器的代码:

public class XXServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(4545);
while (true) {
Thread newThread = new Thread(new XXServerRunner(serverSocket.accept()));
newThread.start();
}
}
}

我将为每个接受的套接字创建一个单独的线程:

public class XXServerRunner implements Runnable {
Socket socket;
public XXServerRunner(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
String readLine = bufferedReader.readLine();
if(readLine!=null) {
System.out.println(readLine);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

这就是我运行客户端的方式:

public class XXClient {

Socket socket;
PrintWriter printWriter;

public static void main(String[] args) throws IOException {
XXClient xxClient = new XXClient();
xxClient.setSocket(new Socket("localhost",4545));
XXClientDataSender xxClientDataSender = new XXClientDataSender(xxClient);
Thread xxClientDataSenderThread = new Thread(xxClientDataSender);
xxClientDataSenderThread.start();
}

public PrintWriter getPrintWriter() {
return printWriter;
}

public void setSocket(Socket socket) throws IOException {
this.socket = socket;
this.printWriter = new PrintWriter(socket.getOutputStream());
}

public void sendText(String stringToBeSent) {
printWriter.write(stringToBeSent);
printWriter.flush();
}
}

我想要实现的也是一个用于发送文本的单独线程,所以我有这个:

public class XXClientDataSender implements Runnable {
XXClient xxClient;
Scanner scanner = new Scanner(System.in);
public XXClientDataSender(XXClient xxClient) {
this.xxClient = xxClient;
}
@Override
public void run() {
while (true) {
String stringToBeSent = scanner.nextLine();
xxClient.sendText(stringToBeSent);
}
}
}

当我运行我的代码时会发生什么,我在控制台中键入文本并按几次 Enter,但我在运行 ServerSocket 的控制台中什么也看不到。但是,当我停止执行 main 方法时客户端(我的意思是 Java 进程,当我为客户端终止 Java 进程时),在服务器的控制台中,我看到现在可以看到所有文本。为什么会这样?

如果我说的不清楚,就是这样:启动服务器启动客户端输入一些文本,按回车键..什么都没有输入一些文本,按回车键..什么都没有为客户端终止进程服务器现在读取所有文本。

为什么?

而且我在为客户端终止进程后也得到了这个异常:

Exception in thread "Thread-0" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at XXClientDataSender.run(XXClientDataSender.java:20)
at java.lang.Thread.run(Thread.java:745)

最佳答案

每次发送时在你的客户端代码中写一个换行符。

您正在使用 BufferedReader#readLine(),它需要换行符或流的结尾。

关于java - 为什么我无法通过此套接字发送文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com