我一直在学习如何用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会“等待”读取信号?我是否错过了一些关于插座的基本概念?如果有人可以帮助我进一步理解该主题,那就太好了。
先谢谢您,
Appa
是,readLine实际上会阻止。它会一直等到您阅读回车/换行或插座关闭。
我的问题如下。 in.readLine()语句是否在“等待”输入?
是,因为.readLine()
是blocking方法,所以它是“等待输入”
如果没有,则使用str时程序没有值,是否应该抛出错误?
我无法解析-声明没有道理。您期望什么错误/异常?
或者一般来说,执行Socket特定功能,例如Socket soc = serverSocket.accept();。还是像上面给出的示例中那样,以任何方式读取InputStream的“ wait”信号?
再次,恐怕这不太清楚(至少对我来说)。ServerSocket#accept()
是一种阻塞方法,如果您要的是套接字,则将等待直到可以建立套接字连接为止。
请注意此代码:
while(true) {
String str = in.readLine();
}
虽然有效,但并不是特别有用,因为您将读取一个String然后将其丢弃,对此不进行任何操作。最好打印获得的String,或者将其传递到可以某种方式使用它的方法中。另一方面,我想如果您要做的只是“吞噬”流以防止OS的缓冲区溢出,那么这可能很有用。