資源描述:
《Connection reset by peer socket write error錯誤分析》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、常出現(xiàn)的Connectionresetbypeer:原因可能是多方面的,不過更常見的原因是:?①:服務器的并發(fā)連接數(shù)超過了其承載量,服務器會將其中一些連接Down掉;?②:客戶關掉了瀏覽器,而服務器還在給客戶端發(fā)送數(shù)據(jù);?③:瀏覽器端按了Stop?通常原因為:遠程主機上對等方應用程序突然停止運行,或遠程主機重新啟動,或遠程主機在遠程方套接字上使用了“強制”關閉(參見setsockopt(SO_LINGER))。另外,在一個或多個操作正在進行時,如果連接因“keep-alive”活動檢測到一個失敗而中斷,也可能導致此錯誤。此時,正在進行的操作以錯誤碼WSAENETRESET失敗返回,后續(xù)操作
2、將失敗返回錯誤碼WSAECONNRESET。但是如果頻繁出現(xiàn),就表示很多客戶端連接到Apache服務器的響應時間太長了,可能是網(wǎng)絡的問題或者服務器性能問題。網(wǎng)友分析:樓主?要從一個被屏蔽的網(wǎng)站上下載一些東西,于是寫了一個Servlet,將它傳到了一臺境外的服務器上.?讓這臺服務器去下載指定的資源,然后再回傳給我.相當于一個代理吧.?JAVA?codepublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringurl=request
3、.getParameter("url");//得到要下載的資源的URL.if(!StringUtils.isNullOrEmpty(url)){System.out.println(url);URLu=newURL(url);URLConnectionconn=u.openConnection();try{///把響應頭設置成一樣的.for(Map.Entry>m:conn.getHeaderFields().entrySet()){if(m!=null&&m.getKey()!=null&&m.getValue()!=null&&m.getValu
4、e().size()>0){response.setHeader(m.getKey(),m.getValue().get(0));}}}catch(Exceptione){//TODO:handleexceptione.printStackTrace();CommonLog.log.warn(e);}InputStreamin=conn.getInputStream();//從connection得到inputstreamOutputStreamout=response.getOutputStream();//得到向客戶端的輸出流try{IOUtils.wrITe(conn.getInpu
5、tStream(),response.getOutputStream());//寫數(shù)據(jù).}catch(Exceptione){e.printStackTrace();//TODO:handleexceptionCommonLog.log.warn(e);if(in!=null){in.close();}if(out!=null){out.close();}}}}IOUtils.wrITe()代碼如下:?JAVA?code/***從input里面讀取數(shù)據(jù)然后寫入output,讀完后自動關閉流。*@paraminputinputStream*@paramoutputoutputStream**
6、/publicstaticvoidwrite(InputStreaminput,OutputStreamoutput)throwsIOException{write(input,output,true);}/***自動從inputstream里面讀數(shù)據(jù),然后寫到outputstream里面去。*@paraminputinputstream*@paramoutputoutputstream*@paramclose讀完后是否自動關閉流。**/publicstaticvoidwrite(InputStreaminput,OutputStreamoutput,booleanclose)throws
7、IOException{byte[]b=newbyte[1024];intlen=input.read(b);while(len!=-1){output.wrITe(b,0,len);len=input.read(b);}output.flush();if(close){input.close();output.close();}}將程序傳到服務器上以后,在服務器上訪問?http://localhost:8080/tes