0

非常に単純なサーバー用の非常に単純なクライアントを作成しています。サーバーが実行されていない場合、17 行目で実行時に ConnectException がスローされますが、その理由はわかりません。ソケットのコンストラクターと getInputStream() のドキュメントを調べましたが、どちらも ConnectException をスローしません。CE のドキュメントを確認したところ、「ソケットをリモート アドレスおよびポートに接続しようとしているときにエラーが発生したことを示す信号です。通常、接続はリモートで拒否されました (たとえば、リモート アドレスでリッスンしているプロセスはありません/ポート)。" それはまさに本当です。サーバーは実行されていませんが、試行錯誤以外にこれを知る方法がわかりません.Socketのドキュメントにないのはなぜですか?

import java.net.*;
import java.io.*;

public class ClientLesson {

    //declare vars
    static Socket socket;
    static BufferedReader inputReader;

    public static void main(String[] args) throws IOException {
        try {
            socket = new Socket("Lithium", 55555);
        } catch (IOException ioe) {
            System.out.println(ioe.toString());
        }
        try {
   this is the problem --> inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (IOException ioe) {
            System.out.print("couldn't get I/O stream");
            ioe.printStackTrace();
        }  
        String fromServer;
        while ((fromServer = inputReader.readLine()) != null) {
            System.out.println(fromServer);
        }
        inputReader.close();
        socket.close();

    }
}
4

1 に答える 1

1

問題がまったく異なることに気付きました... ConnectException は Socket コンストラクターによってスローされ、IOException として処理されます。これは、CE がサブタイプであるためです。17行目でNPEを取得していますが、ターミナル出力に混乱していました。これは次のとおりです。

nexus@Lithium ~/Desktop/Java Workspace/networking $ java ClientLesson 
java.net.ConnectException: Connection refused
Exception in thread "main" java.lang.NullPointerException
    at ClientLesson.main(ClientLesson.java:17)

この 2 つが別の問題であることを理解していませんでした。問題は、ソケットでメソッドを呼び出す前に、17 行目で最初の試行が成功したかどうかを確認する必要があることです。

于 2013-09-07T18:21:41.143 に答える