2011-12-28 29 views
22
ERROR GServerHandler - java.io.IOException: Connection reset by peer 
java.io.IOException: Connection reset by peer 
     at sun.nio.ch.FileDispatcher.read0(Native Method) 
     at sun.nio.ch.SocketDispatcher.read(Unknown Source) 
     at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) 
     at sun.nio.ch.IOUtil.read(Unknown Source) 
     at sun.nio.ch.SocketChannelImpl.read(Unknown Source) 
     at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:323) 
     at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282) 
     at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 

यह लॉग नेटटी का उपयोग करके लागू एक गेम सर्वर से है। इस अपवाद का कारण क्या हो सकता है?"java.io.IOException कब है: सहकर्मी द्वारा कनेक्शन रीसेट" फेंक दिया गया है?

+1

मुझे लगता है कि तट के जादूगर ने आपको एक स्पेल हासिल किया है ताकि आपके द्वारा किए जाने वाले प्रत्येक एकल ऑपरेशन में असफल रहे। कोड प्रदान करें जो अपवाद का कारण बनता है अन्यथा हम आपको – andreapier

+1

की सहायता करने के लिए अबाध नहीं होंगे, ग्राहक ने कनेक्शन को खारिज कर दिया/बंद कर दिया है। कारण देखने के लिए आपको क्लाइंट लॉग की आवश्यकता होगी। – Thomas

+1

@andreapier के बाद से, यह अपवाद नेटवर्क से संबंधित प्रतीत होता है, मैं स्रोत कोड प्रदान नहीं कर सकता। उत्तर (और मजाक) के लिए धन्यवाद हालांकि – WorM

उत्तर

33

java.io.IOException: सहकर्मी

दूसरी तरफ अचानक एक सौदे के बीच में कनेक्शन निरस्त किया गया है द्वारा कनेक्शन रीसेट। इसमें कई कारण हो सकते हैं जो सर्वर की तरफ से नियंत्रित नहीं हैं। जैसे एंडुसर ने क्लाइंट को बंद करने का फैसला किया है या सर्वर को अचानक सर्वर के साथ इंटरैक्ट करते समय अचानक बदल दिया है, या क्लाइंट प्रोग्राम क्रैश हो गया है, या एंडुसर का इंटरनेट कनेक्शन डाउन हो गया है, या एंडुसर मशीन क्रैश हो गई है, आदि।

+0

अच्छी स्पष्टीकरण – minhas23

4

विस्तृत करने के लिए बलुस के जवाब पर, कोई भी परिदृश्य जहां प्रेषक लिखना जारी रखता है, जब सहकर्मी ने पढ़ना बंद कर दिया है और अपनी सॉकेट बंद कर दी है, तो यह अपवाद उत्पन्न होगा। दूसरे शब्दों में, एक अनुप्रयोग प्रोटोकॉल त्रुटि। उदाहरण के लिए, यदि आप सहकर्मी को कुछ लिखते हैं कि सहकर्मी समझ में नहीं आता है, और फिर यह विरोध में अपनी सॉकेट बंद कर देता है, और फिर आप लिखना जारी रखते हैं, तो पीयर का टीसीपी स्टैक एक आरएसटी जारी करेगा, जिसके परिणामस्वरूप यह अपवाद और संदेश होगा प्रेषक पर।

3

नेटी में java.io.IOException का अर्थ है कि आपका गेम सर्वर क्लाइंट को डेटा भेजने का प्रयास करता है, लेकिन उस क्लाइंट ने आपके सर्वर से कनेक्शन बंद कर दिया है।

और यह अपवाद केवल एक ही नहीं है! कई अन्य हैं। Xitrum में BadClientSilencer देखें। मुझे उन त्रुटियों को मेरी लॉग फ़ाइल को गड़बड़ करने से रोकने के लिए जोड़ना पड़ा।

+1

लगता है इसका मतलब यह नहीं है, और यह केवल नेटी तक ही सीमित नहीं है। – EJP

+1

मुझे समझ में नहीं आता है। वर्म ने एक पठन ऑपरेशन के साथ स्टैक ट्रेस पोस्ट किया लेकिन सभी उत्तरों लेखन समस्या की व्याख्या करते हैं। –

+0

लिंक काम नहीं कर रहा है। यह एक है: [BadClientSilencer] (https: // github।com/xitrum-ढांचा/xitrum/ब्लॉब/मास्टर/src/मुख्य/स्केला/xitrum/हैंडलर/इनबाउंड/BadClientSilencer.scala)। मेरी मदद की! – mxro

-1

मुझे लगता है कि यह java.net होना चाहिए। सॉकेटएक्सप्शन इसकी परिभाषा के रूप में एक टीसीपी त्रुटि के लिए कहा गया है।

/** 
* Thrown to indicate that there is an error in the underlying 
* protocol, such as a TCP error. 
* 
* @author Jonathan Payne 
* @version %I%, %G% 
* @since JDK1.0 
*/ 
public 
class SocketException extends IOException { 
+0

लेकिन यह नहीं है। सवाल देखें। – EJP

-1

मुझे उपयोगी कोड डायन के लिए मेरी मदद http://rox-xmlrpc.sourceforge.net/niotut/src/NioServer.java

// दूरस्थ जबरन कनेक्शन बंद कर दिया था, को रद्द

// चयन कुंजी और चैनल बंद कर दें।

private void read(SelectionKey key) throws IOException { 
      SocketChannel socketChannel = (SocketChannel) key.channel(); 

      // Clear out our read buffer so it's ready for new data 
      this.readBuffer.clear(); 

      // Attempt to read off the channel 
      int numRead; 
      try { 
       numRead = socketChannel.read(this.readBuffer); 
      } catch (IOException e) { 
       // The remote forcibly closed the connection, cancel 
       // the selection key and close the channel. 
       key.cancel(); 
       socketChannel.close(); 
       return; 
      } 

      if (numRead == -1) { 
       // Remote entity shut the socket down cleanly. Do the 
       // same from our end and cancel the channel. 
       key.channel().close(); 
       key.cancel(); 
       return; 
      } 
... 
+0

किसी भी तरह से प्रश्न का उत्तर नहीं देता है। – EJP

-1

बहुत सारे कारक हैं, पहले देखें कि सर्वर परिणाम देता है या नहीं, फिर सर्वर और क्लाइंट के बीच जांचें।

सर्वर सर्वर से पहले उन्हें सुधारें, फिर सर्वर और क्लाइंट के बीच लेखन स्थिति की जांच करें!

सर्वर पक्ष डेटाटाइडर और सर्वर के बीच समय बहिष्कार को क्लाइंट साइड से संशोधित करता है, समय के बाहर और उपलब्ध कनेक्शनों की संख्या को सुधारता है!

+1

आप "सुधार" करने के तरीके पर कुछ संकेत जोड़ सकते हैं और उस उत्तर को बेहतर बनाने के लिए उन "चेक" को कर सकते हैं। – m02ph3u5

+1

हाय http://stackoverflow.com/users/890537/m02ph3u5 1. सर्वर पक्ष, आप सर्वर और डेटा स्रोत के बीच का समय बढ़ा सकते हैं। 2. सर्वर सत्र समय को बेहतर बना सकता है। 3. सर्वर के अनुरोध के लिए अपाचे टाइम को बेहतर बना सकता है। 4. एलिव टाइमआउट को जारी रखें। –

+0

सर्वर से पढ़ने के दौरान उसे अपवाद मिल रहा है। आपका जवाब समझ में नहीं आता है। – EJP

संबंधित मुद्दे