- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试建立一点服务器-客户端连接。
它们都有一个 Scanner 和一个 PrintWriter,并且它们使用 Socket 的输入和输出流相互写入。
客户端.java:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
static ServerSocket serverSocket;
static Socket socket;
static PrintWriter printWriter;
static Scanner scanner;
public static void main(String[] args) throws UnknownHostException, IOException {
socket = new Socket("localhost", 13344);
scanner = new Scanner(socket.getInputStream());
printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println("dataline 1");
printWriter.println("dataline 2");
printWriter.println("dataline 3");
printWriter.flush();
//Error!? => I never got the echo from server in output
while (scanner.hasNextLine()) {
String lineRead = scanner.nextLine();
System.out.println("From server" + lineRead);
}
socket.close();
scanner.close();
printWriter.close();
System.out.println("Client has quit.");
}
}
服务器.java
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
static ServerSocket serverSocket;
static Socket socket;
static PrintWriter printWriter;
static Scanner scanner;
public static void main(String[] args) throws IOException {
serverSocket = new ServerSocket(13344);
System.out.println("Waiting for Client to connect");
socket = serverSocket.accept();
scanner = new Scanner(socket.getInputStream());
printWriter = new PrintWriter(socket.getOutputStream());
System.out.println("Client has connected!!");
while (scanner.hasNextLine()) {
String lineRead = scanner.nextLine();
System.out.println("From Client: " + lineRead);
}
//Error!? => This line never runs
System.out.println("Now sending echo to Client");
printWriter.println("Echo from server1");
printWriter.println("Echo from server2");
printWriter.flush();
socket.close();
printWriter.close();
scanner.close();
System.out.println("Server has quit.");
}
}
服务器的输出:
Waiting for client to connect
Client has connected!!
From Client: dataline 1
From Client: dataline 3
From Client: dataline 3
客户端的输出是空的,一个字也没有。
如您所见,服务器的代码终止在从客户端的输出流读取后停止,而客户端的代码终止在它可以从服务器的输出流读取之前停止。
我的问题是:这个 Scanner-PrintWrier 通信是如何工作的,我怎么知道在扫描仪之前打印的 printWriter 是否可以读取这样的服务器 - 客户端连接?我做错了什么,为什么?如何正确使用扫描仪?
编辑:
@T.C 你是这个意思吗?现在我得到了完整的输出,服务器和客户端在发送和接收数据后都退出了。
我是这样修改的:
String line = "";
while (!line.equals("#")) {
line = scanner.nextLine();
if (!line.equals("#")) {
System.out.println("From server" + line);
}
}
最佳答案
Scanner.hasNext*()
方法将阻塞以等待输入进行扫描,因此您无法使用它来检测客户端何时完成发送。
解决这个问题的最简单方法是让客户端发送一个特殊的字符串告诉服务器它已完成发送。
关于java - 代码运行卡在 scanner.hasNextLine(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713412/
我知道我需要使用 hasNextLine() 来推进行 - 但是当我引用 hasNextLine() 时,我不确定为什么它仍然没有退出 while 循环: 我在这里 (sc) 使用扫描仪来读取输入文件
我在使用 Scanner.hasNextLine() 方法时遇到问题。这是我的代码: while(scan.hasNextLine()) { definition = sca
编译此类时遇到问题。我正在阅读一本关于 java 的书,这是练习之一,他们提供了大部分代码。所以这基本上是本书提供的一个库存类。 现在,我遇到的问题是在编译时出现此错误: cannot find sy
假设我有以下文件 Hej Hej Hej A A A A 在 A 行之后换行。 我的问题是代码 while (in.hasNextLine()) { String line = in.next
所以我应该确定文本文件中的行数(包含数字的 100 行),然后创建一个包含行数的数组,但第一个 while 循环用于找出行数文本文件中永远不会存在。第二个循环完全相同,效果很好。请帮帮我! stati
我已经为此工作了几个小时,但自己或在线都找不到问题。我不知道为什么第一个循环确实有效,而第二个循环没有继续经过第一次迭代。 File adjacencies = new File(adjacencie
我正在尝试制作一个拼写检查器,并打算在链表中打开 .txt 文件中的单词,但 hasNextLine() 总是返回 false。 import java.io.File; import java.io
我尝试建立一点服务器-客户端连接。 它们都有一个 Scanner 和一个 PrintWriter,并且它们使用 Socket 的输入和输出流相互写入。 客户端.java: import java.io
首先,我是 Java 的新手,正在尝试完成学校布置的关于创建自动售货机的作业。我的程序将 2 个文件作为 cli 参数,一个用于产品,另一个用于金钱。 对于我的生活,我无法弄清楚为什么代码卡在第 42
我有以下代码: Scanner scanner = new Scanner (file); while (scanner.hasNextLine()){ System.out.println
在我的一项作业中,我试图读取一个文件并逐行打印它。我尝试再次使用 hasNextLine 但没有成功。我试图以某种方式完成它,但我想知道是否有某种方法可以再次浏览我的文件,而无需创建新的扫描仪。 这是
我正在读取这样一个文件的内容: #include #include using namespace std; char line[256]; ifstream infile(filename, i
抱歉,如果这听起来太简单了。我是 Java 的新手。 这是我用来检查 hasNextLine() 的一些简单代码。当我运行它时,我无法让它停止。我想如果你不写任何输入并按下 Enter,你就会跳出 w
我已经包含了 hasNextLine 异常,但我仍然收到 NoSuchElementException 错误 我正在创建一个从文件扫描的回文程序。我可以让它从文件中扫描,但它只返回非回文单词,并返回
我看到的这段代码对我来说看起来很不自然。我通常会使用 hasNextLine() 而不是 boolean 变量 done,如 while 循环中的此代码所示,但现在我很困惑。我的问题是,当需要从控制台
我正在尝试使用输入,但是我遇到了麻烦...如果我使用下面的代码,它还没有结束...所以我处于无限循环中。即使我的输入已到达文件结尾,它也会写类似的内容: ... A number has not be
我试图编写一个从键盘获取输入的读取方法。但输入是一个大文本,需要一次一行进行分析。 risks = new ArrayList(); try{ Scanner sc = new
当我尝试在我的程序上使用scanner.hasNextLine()时,它只是坐在那里并挂起。我想知道是否有任何方法可以解决这个问题或我可以使用任何替代方案。编辑:这背后的原因是我可以从扫描仪中删除所有
我在使用 Scanner.hasNextLine() 时遇到了这个奇怪的问题。我没有使用 Scanner 类,但我习惯使用 Scanner.hasNextLine() 作为循环的条件来连续获取用户的输
这可能更多是因为我对代码不熟悉,但我一直遇到以下问题: 我有一个包含空行的文本文件,以及一个扫描文件的扫描仪。 当我使用 .hasNextLine() 方法时,即使文件中有更多行,它也会返回 fals
我是一名优秀的程序员,十分优秀!