1

以下のコードは、ユーザーが URL を入力し、その Web サイトの IP アドレスを返せるようにする必要がありますが、機能していません。

アプリケーションはコンソール アプリケーションです。かつては機能していましたが、なぜ今は機能しないのかわかりません。

ユーザーがWebサイトにアクセスしてIPアドレスを取得するときに発生するエラーは次のとおりです

IOException:  java.net.SocketException: Connection reset

これが私のクライアントコードです

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    public static void main(String[] args) {

        String hostname = "localhost";
        int port = 6052;

        if (args.length > 0) {
            hostname = args[0];
        }

        Socket clientSocket = null;
        PrintWriter os = null;
        BufferedReader is = null;


        try {
            clientSocket = new Socket(hostname, port);
            os = new PrintWriter(clientSocket.getOutputStream(), true);
            is = new BufferedReader(new    InputStreamReader(clientSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: " + hostname);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: " + hostname);
        }


        if (clientSocket == null || os == null || is == null) {
            System.err.println("Something is  really wrong. ");
            return;
        }

        try {
            if (args.length != 2) {

                System.out.print("Enter a www web address (must have www!) ");
                BufferedReader br = new BufferedReader(new InputSreamReader(Sy.in))
                String keyboardInput = br.readLine();
                os.println(keyboardInput);

            } else {
                os.println(args[1]);
            }
            String responseLine = is.readLine();
            System.out.println("The IP address of " + args[1] + "is" + responseLine);


        } catch (UnknownHostException e) {
            System.err.println("Trying to connect to host: " + e);
        } catch (IOException e) {
            System.err.println("IOException:  " + e);
        }
    }
}

これが私のサーバーコードです

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String args[]) {
        int port = 6052;
        Server server = new Server(port);
        server.startServer();
    }

    ServerSocket echoServer = null;
    Socket clientSocket = null;
    int numConnections = 0;
    int port;

    public Server(int port) {
        this.port = port;
    }

    public void stopServer() {
        System.out.println("Server working hold on a min.");
        System.exit(0);
    }

    public void startServer() {
        try {
            echoServer = new ServerSocket(port);
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Server is now started and is waiting for Clients.");


        while (true) {
            try {
                clientSocket = echoServer.accept();
                numConnections++;
                new Thread(new ServerConnection(clientSocket, numConnections,
                        this)).start();
            } catch (IOException e) {
                System.out.println(e);
            }
        }
    }
}




 class ServerConnection implements Runnable {
 private static BufferedReader is;
 private static PrintStream os;
 private static Socket clientSocket;
 private static int id;
 private static Server server;

 public ServerConnection(Socket clientSocket, int id, Server server) {
this.clientSocket = clientSocket;
this.id = id;
this.server = server;
System.out.println( "Connection " + id + " established with: " + clientSocket );
try {
    is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    os = new PrintStream(clientSocket.getOutputStream());
} catch (IOException e) {
    System.out.println(e);
}
}




public void run() {
    String line;
try {
    boolean serverStop = false;

            line = is.readLine();
    System.out.println( "Received " + line + " from Connection " + id + "." );

                 InetAddress hostAddress = InetAddress.getByName(line);
                 String IPaddress = hostAddress.getHostAddress();
                 os.println(IPaddress);

          is.close();
        os.close();
     clientSocket.close();
} catch (IOException e) {
    e.printStackTrace();
}
}
}
4

1 に答える 1

1

引数がない場合、ホストはlocalhost、ユーザーはWebサイトにプロペラされます。ArrayOutOfBoundsException引数をチェックしなかったからです。

1つの引数で、それはホストです。サイトが期待どおりに機能しないため、サイトの通過は機能しません。

2つの引数で実行すると、最初の引数が。の場合に機能しますlocalhost

于 2013-03-22T17:35:07.627 に答える