黑马程序员技术交流社区

标题: socket的问题 [打印本页]

作者: 陈莹    时间: 2012-11-23 07:32
标题: socket的问题
本帖最后由 陈莹 于 2012-11-23 22:29 编辑

socket在什么情况下会被关闭?(除了调用close方法关闭外)
我在关闭了由socket产生的流时,socket会被关闭吗?
例如:PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
pw.close();
请问这种情况下socket会被关闭吗?



我看看了API上这样写道:
getInputStreampublic InputStream getInputStream()                           throws IOException返回此套接字的输入流。 如果此套接字具有关联的通道,则所得的输入流会将其所有操作委托给通道。如果通道为非阻塞模式,则输入流的 read 操作将抛出 IllegalBlockingModeException
在非正常条件下,底层连接可能被远程主机或网络软件中断(例如,TCP 连接情况下的连接重置)。当网络软件检测到中断的连接时,将对返回的输入流应用以下操作:
关闭返回的 InputStream 将关闭关联套接字。

返回:从此套接字读取字节的输入流。 抛出: IOException - 如果在创建输入流时发生 I/O 错误、没有关闭套接字、没有连接套接字或者使用 shutdownInput() 关闭了套接字输入
getOutputStreampublic OutputStream getOutputStream()                             throws IOException返回此套接字的输出流。 如果此套接字具有关联的通道,则得到的输出流会将其所有操作委托给通道。如果通道为非阻塞模式,则输出流的 write 操作将抛出 IllegalBlockingModeException
关闭返回的 OutputStream 将关闭关联套接字。

返回:将字节写入此套接字的输出流。 抛出: IOException - 如果创建输出流时发生 I/O 错误或者没有连接套接字。
红色字体部分说明加入关闭流了也就会关闭socket共同学习吧!


作者: 李栋梁    时间: 2012-11-23 08:49
关闭socket分为主动关闭和被动关闭,前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接。
作者: jerry2627    时间: 2012-11-23 09:53
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
pw.close();
请问这种情况下socket会被关闭吗?
不会的。两种情况可以关闭  一个是客户端的关闭了 另一种就是服务端强制关闭客户端的连接
作者: 陈莹    时间: 2012-11-23 22:31
jerry2627 发表于 2012-11-23 09:53
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
pw.close();
请问 ...

谢谢,API中socket的getInputStream和getOutputstream方法,上面说假如流关了,那么socket也会被关闭的
作者: 陈莹    时间: 2012-11-23 22:32
jerry2627 发表于 2012-11-23 09:53
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
pw.close();
请问 ...

谢谢,API中socket的getInputStream和getOutputstream方法,上面说假如流关了,那么socket也会被关闭的
作者: filter    时间: 2012-11-23 22:59
陈莹 发表于 2012-11-23 22:32
谢谢,API中socket的getInputStream和getOutputstream方法,上面说假如流关了,那么socket也会被关闭的 ...

我也是这样理解的,难道楼主所标示的红色字体部分不是说明pw.close()能关闭Socket流吗?还是只能关闭它自身
作者: 陈莹    时间: 2012-11-23 23:07
李志阳 发表于 2012-11-23 22:59
我也是这样理解的,难道楼主所标示的红色字体部分不是说明pw.close()能关闭Socket流吗?还是只能关闭它 ...

我的意思是就是说如果流关了,那么socket就关了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2