java - BufferedReader如何与套接字交互?关于套接字的工作方式

标签 java sockets stream

我一直在遵循有关如何在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/

相关文章:

java - 小数据的选择排序与快速排序

java - 剪刀石头布程序 - Java

perl - 在 golang 中使用模板 "N/a* N/a*"解压由 perl 打包的缓冲区

android onclick按钮在Socket上写入字符串

java - 在Java中计算+2000万条记录的统计信息

javascript - 确定 Node 流是否处于 objectMode

java - Hibernate - 如何在不映射到特定类的情况下执行命名 native 查询

java - 暂时禁用 Action 监听器

c - 套接字编程中从客户端获取char()

testing - 视频流测试