关于socket的关闭:close和shutdown】的更多相关文章

声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入输出…
接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道write操作返回成功仅仅能说明数据已经发送到套接字的发送缓冲区,不能代表对端已经成功收到数据,close的默认返回成功也仅仅是成功发出了一个FIN分节,也不代表对端已经确认 问题1:假设中途网络发生问题,非常有可能服务端接收不到这个来自client的FIN分节: 问题2:如果server忙,那么来自cli…
引子 前段时间我们的服务由于一台交换机网络出现故障,导致数据库连接不上,但是在数据库的连接超时参数设置不合理,connect timeout设置的过长,导致接口耗时增加.DB连接超时后线程未正常结束,上游请求又持续进来,最终耗光了Java线程,JVM进入持续GC状态,无法恢复,直到手工重启才恢复服务. 于是在服务的保护方面新增了两个措施,第一,调小服务端workThread的最大线程数.第二,在Server端设置Accept后Socket的readTimeout时间,当Socket调用read方…
在很多实际应用环境中,当用户关了应用程序时,需要做一些善后清理工作,但问题是,用户有时并不会按照推荐的方法关闭应用程序,很有可能不做清理工作,例如在Tomcat的部署应用中,通过实例化一个Server对象来启动servlet容器,并调用其start方法,然后逐个调用组件的start方法,正常情况下,为了让Server对象能够关闭这些已经启动的组件,你应该向指定的端口发送关闭命令,如果你只是简单的突然退出,例如在应用程序过程中关闭控制台,可能会发生一些意想不到的事情. 幸运的是,java为程序员提…
通过两种方式可以关闭一个socket:close和shutdown.直接调用close关闭socket存在以下两个问题: 1. close只是将socket 描述字的访问计数减1,仅当描述字的访问计数为0时,才真正的关闭socket. 2.close终止了数据传输的两个方向:读与写.tcp管道是全双工的,有时候我们仅仅是想通知另一端我们已经完成了数据的发送,但还想继续接收另一端发送过来的数据,在这种情况下调用close关闭socket是不合适的. shutdown可以解决上面关于close的两个…
以Socket发送数据为例: 发送数据时候要声明:DataOutputStream os = new DataOutputStream(socket.getOutputStream()); 最近开发遇到的为题是我要向服务端发送图片,如果os.close()的话服务器可以收到图片但是我客户端的socket会受影响关闭.如果不用os.close()的话,服务器接收图片会有影响,查资料说调用socket.shutdownOutputStream();可以关闭输出流,而且不会影响socket发送数据.…
1.tomcat服务器第一次启动并查看启动日志的命令 在 ../bin 文件夹下输入./startup.sh;tail -f ../logs/catalina.out 2.需要重启服务器的时候 在 ../bin 目录下使用 ./shutdown.sh 无法关闭tomcat服务的时候 使用 ps -ef | grep 项目名 查看项目对应的进程号 例如:  pe -ef |grep tomcat 输出如下 sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bi…
通常,使用关闭输出流来表示输出已经结束.但在进行网络通信时则不能这样做.因为我们关闭输出流时,该输出流对应的Socket也将随之关闭,这样程序将无法再从该socket中读取数据. 为了应付这种情况,socket提供了两个半关闭的方法用来只关闭socket的输入流或者输出流,用以表示输出数据已经发送完成.方法详情: shutdownInput():关闭该socket的输入流,程序还可以通过该socket的输出流输出数据: shutdownOutput():关闭该socket的输出流,程序还可以通过…
有时候在关闭数据库时,发出shutdown immediate;命令后一直未关闭.查看ALERT日志.在等待一段时间后日志中有提示: SHUTDOWN: waiting for active calls to complete. 原因是有些进程无法被PMON进程清理.导致SHUTDOWN时无法关闭而HANG住. ==>依据观察,在ORACLE10G及以上版本号.会是例如以下提示:(2015/11/24最新验证ORACLE9206中也会提示进程号) Active call for process…
转自:https://blog.csdn.net/u012525096/article/details/76924627 今天写安卓向服务器发送图片,过程为:客户端发送数据->服务器接收.处理数据->服务器返回处理信息->客户端接收数据并显示.安卓客户端中,发送数据(out.write)后,调用out.close(),当接收数据a=in.read(data)时,报错. 错误代码:socket recvfrom failed: EBADF (Bad file descriptor) 首先尝…