2016-05-02 10 views
0

私は実行しようとすると、私は "java.net.SocketException:接続リセット"を取得している単純なクライアント/サーバーprogram.Butを実行しようとしています。なぜこの例外が発生するのですか?私のための任意の提案?ここjava.net.SocketExceptionの取得:接続のリセット

コード

SocServer.java

public static void main(String[] args) throws Exception 
{ 
    System.out.println("Server is started"); 

    ServerSocket ss = new ServerSocket(8886); 

    System.out.println("Server is waiting for client request"); 

    Socket s = ss.accept(); 

    System.out.println("Client Connected"); 

    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); 

    String str = br.readLine(); 

    System.out.println("Client Data" + str); 

}

SocketClient.java

public static void main(String[] args) throws Exception 
{ 
    String ip = "localhost"; 
    int port = 8886; 
    Socket s = new Socket(ip,port); 

    String str = "Noman"; 

    OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream()); 
    PrintWriter out = new PrintWriter(os); 

    os.write(str); 
    os.flush(); 
} 
+0

2つのこと:1)すべてのデータが存在し、1SocServer.javaの 'readLine'で処理されていると仮定しています.2)ストリームのいずれも決して閉じません。これを見直してください:http://stackoverflow.com/questions/62929/java-net-socketexception-connection-reset?rq=1 –

+0

リスナーがブロック解除を期待している間は、改行を送信しません。完全に使用されていないPrintWriterの外(私はそれを使用することをお勧めしません。始めに 'String str =" Noman \ n "'を試してみましょう – Fildor

答えて

0

考えられる理由

    あります
  • 他端は意図的に接続をリセットしました。ここでは は文書化されません。 アプリケーションソフトウェアがこれを実行することは、まれであり、一般的に間違っているが、それは、商用 ソフトウェア

のため不明ではありません。

  • もっと一般的には、他の エンドがすでに正常に閉じている接続に書き込むことによって発生します。言い換えれば、アプリケーション プロトコルエラーです。
  • ソケット受信バッファに未読データ がある場合にソケットを閉じることによっても発生する可能性があります。
  • Windowsでは、接続のリセットと同じではない ではないソフトウェアが原因で接続が中止されました。これは、ネットワークの問題により、 から送信されました。これに関するMicrosoftの知識ベースの記事があります。