2011-12-28 6 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) 

このログは、nettyを使用して実装されたゲームサーバーからのものです。この例外を引き起こす原因は何ですか?「java.io.IOException:ピアによって接続がリセットされました」がスローされるのはいつですか?

+1

私は海岸の魔法使いがあなたに呪文を唱えたと思うので、あなたが行うすべてのioの操作は失敗します。例外を引き起こすコードを提供してください。そうでなければ、あなたを助けることはできません – andreapier

+1

まあ、クライアントは接続を拒否/閉じました。何が原因であるかを見るためにクライアントのログが必要になります。 – Thomas

+1

@andreapier以来、この例外はネットワーク関連のようだ、私はソースコードを提供することはできません。答え(そして冗談)ありがとう – WorM

答えて

33

にjava.io.IOException:ピア

による接続リセットは反対側が急激トランザクションの最中に接続を中止しています。これは、サーバー側から制御できない多くの原因がある可能性があります。例えば。エンドユーザは、サーバとのやり取りやクライアントプログラムのクラッシュ、エンドユーザのインターネット接続のダウン、エンドユーザのマシンのクラッシュなどにより、クライアントをシャットダウンしたり、サーバを突然変更したりすることにしました。

+0

良い説明と思われる – minhas23

4

BalusCの答えでは、ピアが読み込みを停止してソケットを閉じた後に送信者が書き込みを続ける場合、この例外が生成されます。つまり、アプリケーションプロトコルエラーです。たとえば、ピアが理解できない何かを書き込み、次に抗議でソケットを閉じた後、書き込みを続けると、ピアのTCPスタックはRSTを発行し、この例外とメッセージが返されます送信者に。

3

Nettyのjava.io.IOExceptionは、ゲームサーバーがクライアントにデータを送信しようとしたが、そのクライアントがサーバーへの接続を閉じていることを意味します。

例外は唯一ではありません!他にもいくつかあります。 XitrumのBadClientSilencerを参照してください。私はそれらのエラーが私のログファイルを乱すのを防ぐためにそれを追加しなければならなかった。

+1

それだけでは意味がありません、それだけでNettyに限定されていません。 – EJP

+1

わかりません。 WorMは読み取り操作でスタックトレースをポストしましたが、すべての回答が書き込みの問題を説明しています。 –

+0

リンクが機能していません。これは:[BadClientSilencer](https:// github。com/xitrum-framework/xitrum/blob/master/src/main/scala/xitrum/handler/inbound/BadClientSilencer.scala)を使用してください。助けて頂きました! – mxro

-1

これはTCPエラーのために定義されているので、java.net.SocketExceptionであるべきだと思います。私便利なコードの魔女のために

/** 
* 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.サーバーへの要求のために、Apacheタイムアウトを改善できます。 4.キープアライブタイムアウトの改善。 –

+0

彼はサーバーからの読み取り中に例外を取得しています。あなたの答えは意味をなさない。 – EJP

関連する問題