java - 我的 Java 套接字在线程中使用时是否保持打开状态?
问题描述
我正在编写一个接受多个客户端套接字连接的简单 Java 服务器。我正在使用单独的线程来处理每个客户端/套接字。考虑到我已经为此客户端/套接字设置了包括BufferedReader
、InputStreamReader
等在内的网络。FileWriter
我的代码是:
//run method of my Runnable everytime a new client connects
public void run(){
String message = null;
while((message = bufferedReader.readLine())!=null){
System.out.println(message+"/n");
//do some other things like writing this message
//to another client or saving it in a file, etc
}
}
- 这是否使客户端套接字保持打开状态?还是套接字在完成从流中读取时最终使线程死了
- 即使在第一次完成读取后,它是否会继续等待来自客户端套接字的更多/新消息/数据?
解决方案
readLine
调用返回时线程将结束null
。当读者到达“流的结尾”时,就会发生这种情况。如果BufferedReader
正在包装与套接字关联的输入流,则套接字连接关闭将触发“流结束”;例如因为远程客户端/服务器关闭了它。
这里没有显示关闭BufferedReader
. 如果有其他东西调用它关闭它,或者如果BufferedReader
对象变得不可访问,它将被关闭。在后一种情况下,当 GC 终结对象时,阅读器和底层套接字流和套接字最终将被关闭。
我的问题是这是否使客户端套接字保持打开状态?或者当它完成从流中读取时,套接字和最终线程是否会死掉,或者即使在第一次完成读取之后,它是否会继续等待来自客户端套接字的更多/新消息/数据?
这取决于。看上面。
关键是编写的代码会一直读取,直到没有更多可读取的内容为止。直到“完成”。或者换一种说法“它完成了”......当且仅当另一端告诉它,通过关闭流。
推荐阅读
- php - 如何以精确的扩展名下载角度文件
- angular - 使用Angular 5中路由文件的条件重定向页面
- python - 有人可以帮助解释这个python代码吗
- c# - Spotify Redirect 在参数前添加字符
- eclipse - 在 Pydev 中激活虚拟环境
- php - Google ReCaptcha V2 无法使用旧的 PHP 代码
- python-3.x - Python3 Gtk3 将 GdkPixbuf 附加到 Gtk.ListStore
- python - 在python中获取每个neibours字节的一半
- jquery - 将更改其他 CSS 与类链接
- python - 如何在 Python 中覆盖 ibm_db.exec_immediate(connect, sql) 上的模式使用