问题描述
通过wifi,可以链接webservers平且从中得到数据,但是打开移动网络,就无法从webservers得到数据,手机端使用的代码如下:SoapObjectrequest=newSoapObject("http://nenggong.com","checkUser");request.addProperty("logname",name);request.addProperty("password",pass);SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=request;HttpTransportSEht=newHttpTransportSE("http://"+IP+"/axis2/services/crane_services");try{ht.call(null,envelope);//call得不到数据}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(XmlPullParserExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}
有一次,从webservers里面得到过数据,后面我再怎么弄,再也得不到数据了webservers是我自己写的,功能在数据库中操作数据。已经发布到tomact下面了,
解决方案
解决方案二:
是不是移动网络网速不给力,之前遇到的一个也是在wifi下是可以的,但是在流量的这种情况下就得不到数据了。原因和这个有关系。
解决方案三:
http://"+IP+"/这个IP是内网吧,打开移动网络,只能访问公网IP*****************************************************************************http://feiyun0112.cnblogs.com/
解决方案四:
引用2楼feiyun0112的回复:
http://"+IP+"/这个IP是内网吧,打开移动网络,只能访问公网IP*****************************************************************************http://feiyun0112.cnblogs.com/
IP是外网的IP,这个没有问题,我从外网的wifi可以连接到webservers,得到数据
解决方案五:
引用1楼u012173239的回复:
是不是移动网络网速不给力,之前遇到的一个也是在wifi下是可以的,但是在流量的这种情况下就得不到数据了。原因和这个有关系。
最后你解决问题了吗?是怎么解决的呢?
解决方案六:
使用手机端调用,会出现10-2118:14:25.685:W/System.err(14444):java.net.SocketException:recvfromfailed:ECONNRESET(Connectionresetbypeer)错误,在网上也查询了各种各样的说法,不知道怎么弄了。。。。。加到100分,有没有大神来啊
解决方案七:
总结一下:1.你的socket队列中没有空间了2.receiverneveracknowledgesdatasentonadatastreamsocket(接受者不承认在数据流接口上发送的数据)3.Aconnectionwilltimeoutifthelocalsystemdoesn'treceivean(ACK)nowledgementfordatasentConnectionresetbypeer抛出的异常也有可能是客户端中断连接。当客户端中断连接的时候服务器也会抛出这个异常出来。就是说客户端正在连接的时候突然终止了连接,这样,服务器端会抛出Connectionresetbypeer异常出来http://topic.csdn.net/u/20080402/16/7fe0a9c2-cef5-4756-8c45-157555cd0097.html第4个异常是java.net.SocketException:(Connectionreset或者Connectresetbypeer:Socketwriteerror)。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connectresetbypeer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connectionreset)。简单的说就是在连接断开后的读和写操作引起的。http://topic.csdn.net/u/20080328/10/e08d894a-319a-4985-8407-50e103305e6c.html我这里有关于网络异常方面的建议,发上去大家学习:第1个异常是java.net.BindException:Addressalreadyinuse:JVM_Bind。该异常发生在服务器端进行newServerSocket(port)(port是一个0,65536的整型值)操作时。异常的原因是以为与port一样的一个端口已经被启动,并进行监听。此时用netstat–an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。第2个异常是java.net.ConnectException:Connectionrefused:connect。该异常发生在客户端进行newSocket(ip,port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。出现该问题,首先检查客户端的ip和port是否写错了,如果正确则从客户端ping一下服务器看是否能ping通,如果能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。第3个异常是java.net.SocketException:Socketisclosed,该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。第4个异常是java.net.SocketException:(Connectionreset或者Connectresetbypeer:Socketwriteerror)。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connectresetbypeer)。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connectionreset)。简单的说就是在连接断开后的读和写操作引起的。第5个异常是java.net.SocketException:Brokenpipe。该异常在客户端和服务器均有可能发生。在第4个异常的第一种情况中(也就是抛出SocketExcepton:Connectresetbypeer:Socketwriteerror后),如果再继续写数据则抛出该异常。前两个异常的解决方法是首先确保程序退出前关闭所有的网络连接,其次是要检测对方的关闭连接操作,发现对方关闭连接后自己也要关闭该连接。客户端错误代码10053Softwarecausedconnectionabort(软件原因导致连接中断)又涉及到一个问题就是阻塞函数和非阻塞函数,阻塞Socket和非阻塞Socket一是阻塞函数,一是非阻塞函数。所谓阻塞函数,是指其完成指定的任务之前不允许程序调用另一个函数,在Windows下还会阻塞本线程消息的发送。所谓非阻塞函数,是指操作启动之后,如果可以立即得到结果就返回结果,否则返回表示结果需要等待的错误信息,不等待任务完成函数就返回http://www.aka.org.cn/Lectures/002/Lecture-2.1.8/Lecture-2.1.8/new_page_15.htmhttp://www.cppblog.com/kenlistian/archive/2007/12/27/39746.htmlhttp://hi.baidu.com/evenque/blog/item/1ccfc63ffc3527c17d1e7188.htmlhttp://www.cic.tsinghua.edu.cn/jdx/lunwen/WinSockx.htmConnectionresetbypeer的原因:经常出现的Connectionresetbypeer:原因可能是多方面的,不过更常见的原因是:①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;②:客户关掉了浏览器,而服务器还在给客户端发送数据;③:浏览器端按了Stop很多人都说是客户端造成的,没有办法控制,是个比较郁闷的问题。引起该问题的原因是由于此时Server端连接已经被复位,而Client依然通过该连接在接收和发送数据,在网上搜索了一下该错误,发现该错误引起的原因大都是防火墙的原因,嘿嘿,又学了一招。socket,niosocket及niosocket框架MINA总结WindowsSocketsErrorCodeshttp://msdn2.microsoft.com/en-us/library/ms740668.aspxsocket通信有通信的规则,如果你希望保持长连接,就应该有个通信协议,包括写入/0也是规则的一部分,传完一个文件等待下一个.要可不保持长连接,可使用webservice,这样你的协议变的更为可读,更容易包装成产品.看你的程序希望read结束,不象是希望保持长连接的样子,晕ing经常出现的Connectionresetbypeer:原因可能是多方面的,不过更常见的原因是:①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;②:客户关掉了浏览器,而服务器还在给客户端发送数据;③:浏览器端按了Stop很多人都说是客户端造成的,没有办法控制,是个比较郁闷的问题。这是网络连接断掉引起的,一般是由于通过了防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会切断这个TCP的session,这时就会导致Connectionresetbypeererrorhttp://topic.csdn.net/t/20060915/12/5024325.html沟通非阻塞IO与阻塞IO-输入流沟通非阻塞IO与阻塞IO-输出流附加该问题的最近结论1.我使用MyEclipse单步调试,当调试到inputStream的时候,看变量,发现一个问题,那就是SocketInputStream的Channel是null,为什么那,我不知道又在网络上找到几句话粘贴到这里吧!如下"Nobufferspaceavailable,recvfailed"谢谢sandyen(杉叶)的回答,我在网上也搜到这个,但是不是这个原因。问题已解决,确实不是程序的问题。netstat-an发现有大量的端口占用,监听很多机器的139,445端口。确定机器中了震荡波,下载补丁安装重启,问题解决。导致这个异常的原因应该是系统的socket大量的资源被占用,导致没有足够的资源接收前台上报或者回复的数据。
解决方案八:
感谢楼上大神的粘贴回复,虽然没看太明白,但还是万分的感谢。首先,贴一下我现在进程:经过多方面的测试(我在重庆,webservers也是部署在重庆)使用联通3g的网络,可以调用webservers平且得到数据,但是使用移动的3g网络或者2g网络都无法调用,并且会出现上述错误,又通过在深圳的朋友帮我用移动网络进行测试,发现竟然可以调用webservers,初步判定是:重庆移动网络不知道处于什么原因将我的http链接给close掉了,但是这有可能吗?我添加ht.debug=true;后出现新的错误:BufferedInputStreamisclosed网上回复:是2.3以上版本的一个bug,弄得我又是一团雾水。是移动网络弱造成的原因吗?还是我服务器端或者客户端的bug所造成的?
解决方案九:
我觉得现在我的问题就是:这是网络连接断掉引起的,一般是由于通过了防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会切断这个TCP的session,这时就会导致Connectionresetbypeererror这个原因造成的。这个是我服务器端防火墙的设置的问题吗?服务器端是有一个企业初级的防火墙的。我该怎么设置呢?
解决方案十:
引用8楼u010475784的回复:
我觉得现在我的问题就是:这是网络连接断掉引起的,一般是由于通过了防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会切断这个TCP的session,这时就会导致Connectionresetbypeererror这个原因造成的。这个是我服务器端防火墙的设置的问题吗?服务器端是有一个企业初级的防火墙的。我该怎么设置呢?
如果是你服务器的问题,为什么有些地方好呢,我估计应该是每个地方的移动或者联通有限制。
解决方案十一:
感谢他写留痕版主对我的点拨,回答,万分感谢。我在网上发现这个问题还是很多人碰到的,但到最后都不了了之了,也没有一个具体的解决办法,如果是移动做了相关的限制,我应该去找移动去咨询这个事情吗?有没有通过其他的办法绕过去,比如说,通过代理服务器绕过去,这种办法可行吗?抑或还有没有其他的办法可以让移动的用户也能使用啊
解决方案十二:
我没做过这块,所以不敢妄下结论,但是用代理这个方法应该可行
解决方案十三:
不知道楼主有没有解决,网上有人说是将这段代码:envelope.dotNet=true;改为“envelope.dotNet=false;”。不过我用这个办法没有解决,我把网络cmnet改为cmwap就可以访问了,如果还不可以去下载一个最新的ksoap2(http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2)。楼主如果有其他好办法,麻烦分享一下啊。
解决方案十四:
楼主,我也遇到这个问题了,不知道可否有解决的办法
解决方案十五:
引用8楼u010475784的回复:
我觉得现在我的问题就是:这是网络连接断掉引起的,一般是由于通过了防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会切断这个TCP的session,这时就会导致Connectionresetbypeererror这个原因造成的。这个是我服务器端防火墙的设置的问题吗?服务器端是有一个企业初级的防火墙的。我该怎么设置呢?
开发手机APP时,使用轻量级的直接HttpGet、Post访问,不要使用什么webservice,更不要使用wcf。
其他方案:
你自己设置,是没有用的。以瞎猜的方式去长篇大论引经据典,但是经不起测试。同样的服务器ip和端口,同样的http协议,如果你使用轻量级的http访问方式,就一点问题都没有了。使用webservice就会在移动网络繁忙时随时被中断、丢弃。
其他方案:
引用7楼u010475784的回复:
感谢楼上大神的粘贴回复,虽然没看太明白,但还是万分的感谢。首先,贴一下我现在进程:经过多方面的测试(我在重庆,webservers也是部署在重庆)使用联通3g的网络,可以调用webservers平且得到数据,但是使用移动的3g网络或者2g网络都无法调用,并且会出现上述错误,又通过在深圳的朋友帮我用移动网络进行测试,发现竟然可以调用webservers,初步判定是:重庆移动网络不知道处于什么原因将我的http链接给close掉了,但是这有可能吗?我添加ht.debug=true;后出现新的错误:BufferedInputStreamisclosed网上回复:是2.3以上版本的一个bug,弄得我又是一团雾水。是移动网络弱造成的原因吗?还是我服务器端或者客户端的bug所造成的?
移动网络系统改造问题。中移动的系统太过庞大,原来并不适合针对业余开发人员的“又大又慢的”webservice、WCF等等机制的,你应该使用针对稍微专业一点的开发人员、轻量级、自定义对象序列化/反序列化机制的直接http或者直接tcp通讯方式。
其他方案:
同是重庆人,同样遇到这个问题,不过我不是访问接口,是直接连服务器上读取一段xml文件,移动网络,用浏览器打开可以访问打开,但在程序里遇到楼主的错误,wifi又没问题,哈哈。不过我基本没理会这个问题,以前把xml放到阿里云上,重庆移动网络是没问题的,现在放到服务器上出现问题
其他方案:
我在使用CMCC-EDU网络情况下,偶尔遇到该情况,使用apache的http方式造成了connectresetbypeer,后来直接使用java.net.HttpURLConnection异常解决。