黑马程序员技术交流社区

标题: TCP协议的中Socket的一点小问题,求指点。 [打印本页]

作者: 何仕映    时间: 2013-5-27 19:45
标题: TCP协议的中Socket的一点小问题,求指点。
本帖最后由 何仕映 于 2013-5-28 16:11 编辑

在建立TCP服务端的ServerSocket对象后,通过此对象调用accept()方法获取客户端的Socket的对象。在服务端通过获取到的客户端Socket对象调用close()方法,似乎没有把客户端关掉。是这样的吗?如果关了有什么方法可以验证吗?麻烦各位指点一下。谢谢。

作者: 陈潜    时间: 2013-5-27 22:59
首先,这个问题,怎么说呢,老毕的视频中好像每次都是关闭了的
但是查看JDK文档:
public void close() throws IOException关闭此套接字。
所有当前阻塞于此套接字上的 I/O 操作中的线程都将抛出 SocketException。
套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字。
如果此套接字有一个与之关联的通道,则关闭该通道。
所以说其实服务端的是自动关闭的

你可以到eclipse里面试试,如果不关闭客户端的socket连接,eclipse是有提示的
但是如果不关闭服务端的,eclipse是不会提示的

作者: 李慧声    时间: 2013-5-27 23:56
我想是这样的,首先得明确一点,服务端和客户端应该是你请求一次,我相应一次,你请求多次,我响应多次,其实和我们上网的道理是一样的,比如请求某一个www.itheima.com网站,刚开始可以登录进去玩,但是过了一段时间www.itheima.com挂了,再去请求,是不是登不进去啊。就是说在这句话Socket s = new Socket("127.0.0.1",10000);压根儿就过不去,你觉得还会有s.close()么?
作者: Super_Class    时间: 2013-5-28 09:08
只要服务器关掉。客户端也就关掉了。连接不到Socket对象上了




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