我一直在遵循有关如何在Java中构建简单聊天应用程序的教程。我了解了服务器与客户之间如何通信的基本原理。到目前为止,我已经使用PrintWriter发送,并且使用BufferedReader接收双方的信息。但是我没有得到的是这怎么不会导致错误呢?
Socket soc = new Socket(ipAddress, port);
BufferedReader in = new BufferedReader( new InputStreamReader(soc.getInputStream));
while(true) {
String str = in.readLine();
}
我的问题如下。
in.readLine()
语句是否在“等待”输入?如果没有,那么使用str
时程序没有值,是否应该引发错误?或一般来说,套接字特定的功能(例如Socket soc = serverSocket.accept();
)还是上面给出的示例中的InputStream读取信号“等待”是什么呢?我是否错过了一些关于 socket 的基本概念?如果有人可以帮助我进一步理解该主题,那就太好了。先感谢您,
阿帕
最佳答案
My question would be the following. Is the in.readLine() statement "waiting" for input?
是的,因为
.readLine()
是一种阻止方法,所以它是“等待输入”If it does not, shouldn´t the program throw Errors if using the str since it has no value?
我无法解析-声明没有道理。您期望什么错误/异常?
Or in general terms, do Socket specific functions like Socket soc = serverSocket.accept(); or as in the example given above the reading of an InputStream "wait" for a signal whatsoever?
同样,我担心这还不太清楚(至少对我而言)。
ServerSocket#accept()
是一种阻止方法,如果您要这样做,它将等待直到建立套接字连接为止。请注意此代码:
while(true) {
String str = in.readLine();
}
有效时,它并不是特别有用,因为您将读取一个String然后将其丢弃,对此不进行任何操作。最好打印获得的String,或者将其传递到可以某种方式使用它的方法中。另一方面,我想如果您要做的只是“吞噬”流以防止OS的缓冲区溢出,那么这可能会很有用。
关于java - BufferedReader如何与套接字交互?关于套接字的工作方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61044121/