公司有个系统,比较古老,web端使用的是applet,applet作为socket client端。另一台服务器运行socket server.当多次执行某一个特定事务时(通过Applet,该事务会触发发送message到server),会引起browser, outlook, msn等任何有关网络连接的应用软件都挂掉。重新打开也不行,必须注销或重启机器。
1,不是每台机器都会产生这样的问题,有些客户机运行没有任何问题。
2,这些客户机的操作系统,浏览器,jdk version应该都没有区别。
3,很多事务都通过socket传送message,只有该操作会出现此类问题。
4,server端log显示,已经与client端建立连接,开始接受数据,然后就挂在那里了。现在根本不知道问题出在那里,说是代码问题吧,有些机器还都好用,说不是代码问题吧。确实只有该事务会引起这个问题。郁闷了好久了

解决方案 »

  1.   

    客户端netstat监听端口:
    First netstat:
    Active ConnectionsProto Local Address Foreign Address State
    TCP nataliec:1218 cs1epo2.sg.int.psaglobal.com:82 ESTABLISHED
    TCP nataliec:1226 10.106.34.20:http FIN_WAIT_1
    TCP nataliec:1227 10.106.34.20:22501 CLOSED --socket端口
    出问题后:
    Second netstat (Client hang):
    Active ConnectionsProto Local Address Foreign Address State
    TCP nataliec:1189 cs1epo2.sg.int.psaglobal.com:82 TIME_WAIT
    TCP nataliec:1195 10.106.34.20:http TIME_WAIT
    TCP nataliec:1200 corp4dcsg1.sg.int.psaglobal.com:microsoft-ds TIME_WAIT
    TCP nataliec:1202 cs1epo2.sg.int.psaglobal.com:82 TIME_WAIT
    TCP nataliec:1207 10.106.34.20:http TIME_WAIT
    TCP nataliec:1210 10.106.34.20:http TIME_WAIT
    TCP nataliec:1213 10.106.34.20:http TIME_WAIT
    TCP nataliec:1216 10.106.34.20:http ESTABLISHED
    TCP nataliec:1217 cs1epo2.sg.int.psaglobal.com:82 FIN_WAIT_2
    TCP nataliec:1218 cs1epo2.sg.int.psaglobal.com:82 ESTABLISHED
    TCP nataliec:1424 xchg2vs1.sg.int.psaglobal.com:10201 ESTABLISHED
    TCP nataliec:1453 corp4dcsg1.sg.int.psaglobal.com:1026 ESTABLISHED
    TCP nataliec:1463 xchg1vs1.sg.int.psaglobal.com:1475 ESTABLISHED
    TCP nataliec:4522 corp4dcsg1.sg.int.psaglobal.com:1026 ESTABLISHED
    TCP nataliec:4526 xchg2vs1.sg.int.psaglobal.com:10201 ESTABLISHED
    TCP nataliec:4968 corp4dcsg1.sg.int.psaglobal.com:3268 CLOSE_WAIT可以看到没有了该socket的连接,不知怎么被关掉了。
      

  2.   

    这样测试吧既然msn这些都不可以用了,肯定是这个客户端占用了不该占用的资源你写一个tcp连接的客户端程序,注意最好能够调试,在那台机器出问题后运行这个客户端,看看出现什么异常检查那个出问题的applet,重点看有没有socket重连动作和数据发送时会不会出现重复发送
      

  3.   

    加了一些打印在客户端代码,然后有以下log info:
    Host:#10.106.34.20#
    Port:#22501#
    Begin sending msgThu Dec 21 19:47:44 SGT 2006
    /10.106.34.20
    22501
    /10.100.130.103
    End sending msgThu Dec 21 19:47:44 SGT 2006
    begin receive msgThu Dec 21 19:47:44 SGT 2006
    end receive msgThu Dec 21 19:47:45 SGT 2006
    Cheer:message is received第一次连接并发送msg成功
    Host:#10.106.34.20#
    Port:#22501#
    Begin sending msgThu Dec 21 19:47:49 SGT 2006
    /10.106.34.20 (server端IP,当连接socket成功后,在发送数据前打印该些信息)
    22501 (Port)
    /10.100.130.103
    java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
    at java.net.SocketOutputStream.write(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
    at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source)
    at java.io.ObjectOutputStream.writeClassDesc(Unknown Source)
    at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at pass.bhr.net.MessageProxy.sendObj(MessageProxy.java:80)
    at pass.bhr.net.MessageProxy.sendMessage(MessageProxy.java:96)
      

  4.   

    一般来说,这种Exception应该是由于网络不稳定或者user反复刷新页面引起,但是现在由于出现这种情况比较稳定,所以应该不是网络不稳定,user是多年操作经验,不会出现操作上的问题。而且正常这个错误不应该引起所有的网络连接都断掉。看起来像是先有了网络连接出现问题导致了抛出这个错误。就由不明白,为什么网络会出现问题。