Software caused connection abort解决办法
(2013-01-08 12:18:27)
标签:
端再解决方法解决办法第五权限it |
分类: 工具 |
使用远程登录工具putty或者SecureCRT连接到服务器时,长时间不操作造成网络中断,出现Software caused connection abort
Software caused connection abort的意思是软件的原因造成的网络中断,所以解决办法就要用软件入手,用putty连接你的linux,修改服务器中/etc/ssh /sshd.config 文件,将LoginGraceTime的值设为0,默认为2m,TCPKeepAlive 设为yes, 然后使用service sshd restart来重启sshd服务
Linux服务器空闲后自动断开的相关设置
最 近发现
SecureCRT连接到sshd服务器后在一段时间内不操作就老会自动断开,在网上查了一下,发现原来是因为客户端与服务器之间存在防火墙,安全起见,
在超过特定的时间后就会把空闲连接断开。 解决方法:
既然会断开超时的空闲连接,那么我们就应该让客户端与服务器之间的连接“忙”起来,方法有两个:
从服务器方面入手: 修改/etc/ssh/sshd_config配置文件 ClientAliveInterval
300(默认为0) 这个参数的是意思是每5分钟,服务器向客户端发一个消息,用于保持连接 service sshd reload
生效
从 客户端入手:
上面是配置需要服务器权限,如果没有服务器权限则可以使用这个方法,其思想是:客户端向服务器发一个消息,用于保持连接
secureCRT在选项 终端 反空闲 中设置每隔多少秒发送一个字符串,或者是NO-OP协议包 putty:putty ->
Connection -> Seconds between keepalives ( 0 to turn off ),
默认为0, 改为300.
解决方法很简单:选择
option->session option->Terminal->Anti-idle->Sendstring [char]every 119 seconds
即可。
每隔119秒发送字符char过去以保持连接
*********************************************************************************
我在编写java集成服务器端时,出现了SocketException异常,错误如下:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2249)
at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2542)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at nju.edu.server.XMLServer$ServerThread.run(XMLServer.java:86)
编译提示我的错误出现在下面代码的第五行:
try {
while(true){
ObjectInputStream in= new ObjectInputStream(socket.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
ServerOrder svod=(ServerOrder)in.readObject();
System.out.println(svod.ordertype);
Socket socketToC = new Socket("localhost",2400);
Socket socketToB = new Socket("localhost",2401);
按照异常提示,我的错误在于服务器在响应客户端socket时出现了问题。
现在在服务端读取客户端的ServerOrder(一个类)时,只在某些情况下可以读到,大多数情况都会报出这个异常,读不到任何类。
我不理解究竟问题出在哪儿,socket该关闭的都关闭了啊,而且也没有在进程结束前提前关闭的情况。
求大神帮助~~
出现这个情况一般是客户端那边写完流后,就立即关闭了socket。服务器端这边还没读完,所以就报错了,你可以让客户端那边写完对象后,等服务器端回一个状态给客户端。客户端再关闭流。