最近在做电信短信网关的项目时遇到这个问题,当程序初始化请求与服务器连接的时候老报java.net.SocketException: Connection reset错误,就是连不上。询问了用户,配置的服务器IP,端口,uesr/pwd都没问题,他那边也把这个IP加入了充许连接的IP池里了,可还是连不上。请求各位高手,有遇到过类似的问题吗,如何解决呢?谢谢了!

解决方案 »

  1.   

    用命令行telnet看看能不能连通
      

  2.   

    telnet ip port
    尝试一下,如果能够联通,再查程序问题!程序方面也很简单,挨个对一下就可以!
    没有其他的办法!
      

  3.   

    telnet <ip> <port>看看能连得上去不?
      

  4.   

    # telnet *.*.*.* *****
    Trying *.*.*.* *****...
    Connected to *.*.*.* .
    Escape character is '^]'.
    Connection closed by foreign host.
    上面的*是数字,telent是这样的结果
      

  5.   

    是的,刚开始调用连接,就出现这个异常了,我开始以为是用户名密码的事,后来测试了几次,用了错误的用户名和密码来调用,结果还是一样的错误,看来连认证用户名和密码这一步都没有到,连接就结束了。如果我把服务器IP或者端口换成错的,就会报“连接服务器失败”错误,改一下本机的IP,再连就报“对方拒绝提供服务”,真不知道是那块出问题了,纠结。
      

  6.   

    端口开着,只是服务存在,不见得一定是没连上报这个错,也有可能连上后,DB服务端 connection 已经达到最大链接数,建议你连接数据库的时候,查下max connection 和 current connection。你做的是移动的项目,那肯定是orcale了。一般他们数据库服务器都是给N个应用使用的,最好查一下看下
      

  7.   

    昨天仔细的跟踪了一下程序的运行状态,发现new Socket()已经成功了,而且都执行完了out.write(user)等操作,但在执行in.read(buffer)的时候抛出了Connection reset错误,这样的话应该不是连接数满了吧,而且也问用户了,没有达到最大连接数,还在进一步找问题中,各们高手有什么思路吗?
      

  8.   

    在执行in.read(buffer)的时候抛出了Connection reset错误,,,
    很明显,你发送的内容,对方解析时报错,一报错,对方可能会关闭连接。
      

  9.   

    楼主的问题是个 分包问题
    给两篇文章供楼主参考,
    http://kb.cnblogs.com/a/1766007/
    http://hi.baidu.com/eaglebetter/blog/item/e9b1e7644e1d2cf6f73654d0.html
      

  10.   

    谢谢这位朋友,确实是分包问题。仔细研究了原api里面的代码,在out.write的时候一共是向服务器压入42个字节的数据,但是非常奇怪的是,这42个字节的数据并不是一个数据包发送到服务器端的,中间被分成了2个数据包,1个1字节,1个41字节,这导致了服务器在读取登录数据的时候出错,没能通过,所以断开了连接,抛出了connection reset异常。我从api代码里看到第一个向服务器压入数据的命令是out.writeInt(id),这是一次压入一个4字节的数据呀,怎么会被拆开了呢?看了mybeautiful推荐的文章,但是好像没有好的解决办法,不知道大家有没有什么好办法没,请大家帮我想想办法呀!