加载中…
个人资料
杭州丁俊
杭州丁俊
  • 博客等级:
  • 博客积分:0
  • 博客访问:9,750
  • 关注人气:127
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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服务器空闲后自动断开的相关设置

 

 怎样让服务器和一定时间没有任何操作的终端自动断开连接? # vi /etc/profile 增加: TMOUT=1800 这样30分钟没操作就自动LOGOUT

最 近发现 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.

 

 

工作中使用SecureCRT,连接上远程服务器后,如果一段时间没有操作的的话,该会话会自动断开。此时会话对应的标签是绿色的,(如果网络连接中断的话,标签会变成红色,并且提示连接中断并自动重新连接),但按任何键都没有反应。
解决方法很简单:选择
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该关闭的都关闭了啊,而且也没有在进程结束前提前关闭的情况。
求大神帮助~~
我来帮他解答
满意回答
2011-10-28 14:37
出现这个情况一般是客户端那边写完流后,就立即关闭了socket。服务器端这边还没读完,所以就报错了,你可以让客户端那边写完对象后,等服务器端回一个状态给客户端。客户端再关闭流。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有