A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄云南 中级黑马   /  2012-3-16 15:55  /  2730 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

socket类中有一个shutdownOutput();的方法它是用来禁用socket对象中的输出流,
我不明白,禁用了还不如直接用close方法把它关了不就更省事,又省资源吗?
这两方法有什么不同的用途啊?

3 个回复

倒序浏览
close() 是指套接字被关闭后,便不可在以后的网络连接中使用(即无法重新连接或重新绑定)。需要创建新的套接字。
shutdownOutput();禁用此套接字的输出流
一个是关闭套接字,一个是关闭套接字的输出流
回复 使用道具 举报
shutdownOutput()方法是用来禁用socket对象中的输出流,它给服务端提供了一个结束标识,服务端接到这个标识后,就停止对客户端数据的接收,再处理数据。
如果用直接close,就没有给服务端发送这个标识,服务端还是会一直等客户端的数据,从而造成服务端的资源浪费
回复 使用道具 举报
禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException
close()关闭套接字关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。
如果此套接字有一个与之关联的通道,则关闭该通道。
shutdownOutput()只是关闭输出流 关闭以后 还可以用此套接字的InputStream () 继续读取信息。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马