Java Client / Server-Programm中的UnknownHostException

时间:2016-08-04 12:20:18

标签: java networking server client

类Server:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server{

    private int port;
    private Socket client;
    private ServerSocket server;

    public Server(int port) {
        try {
            this.port = port;
            setServer(new ServerSocket(this.port));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        this.start();
    }


    public void start() {

        ArrayList<ClientHandler> clients = new ArrayList<>();
        ExecutorService executor = Executors.newFixedThreadPool(20);


        System.out.println("Server started...");
        while (true) {
            try {
                setClient(null);
                setClient(getServer().accept());
                if (getClient() != null) {
                    ClientHandler handler = new ClientHandler(getClient());
                    System.out.println("Client connected...");
                    clients.add(handler);
                    executor.execute(handler);

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    public static void main(String[] args) {
        Server server = new Server(4567);

    }

    public Socket getClient() {
        return client;
    }

    public void setClient(Socket client) {
        this.client = client;
    }

    public ServerSocket getServer() {
        return server;
    }

    public void setServer(ServerSocket server) {
        this.server = server;
    }

}

现在,我的问题是,类中是否存在问题,导致UnknownHostException?我已经尝试过调试,但问题出在类Client

班主任:

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

public class Client{

    private String kennung;
    private Socket server;
    private String host;
    private int port;

    public Client(String kennung, String host, int port){
        setKennung(kennung);
        setHost(host);
        setPort(port);
        try {
            setServer(new Socket(this.host, this.port));


            //Scanner reader = new Scanner(this.server.getInputStream());
            PrintWriter writer = new PrintWriter(getServer().getOutputStream(), true);
            Scanner sc = new Scanner(System.in);

            writer.println("The Client");


            /*while(true){
                boolean next = reader.hasNext();
                if (next) {
                    String line = reader.nextLine();
                    if(!line.equals(null)){
                    System.out.println("From another one: " + line);
                    }

                }
                writer.println(sc.next());
            }*/

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if( server != null){
                try {
                    server.close();
                } catch (IOException e) {
                    //ignore -> Server getting closed
                }
            }
        }

    }





    public String getKennung() {
        return kennung;
    }





    public void setKennung(String kennung) {
        this.kennung = kennung;
    }





    public Socket getServer() {
        return server;
    }





    public void setServer(Socket server) {
        this.server = server;
    }





    public String getHost() {
        return host;
    }





    public void setHost(String host) {
        this.host = host;
    }





    public int getPort() {
        return port;
    }





    public void setPort(int port) {
        this.port = port;
    }





    public static void main(String[] args) {
        Client testClient = new Client("testClient", "127.0.0.1", 4567);
        System.out.println("Client created");

    }



}

最后,但并非最不重要:实现Runnable并运行Thread的Class ClientHandler,我从客户端读取输入并将其写入服务器。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.ArrayBlockingQueue;

public class ClientHandler implements Runnable {
    public ArrayBlockingQueue<String> messsages;
    Socket client;

    public ClientHandler(Socket client) {
        this.messsages = new ArrayBlockingQueue<>(20);
        this.client = client;

    }

    @Override
    public void run() {

        PrintWriter writer = null;
        Scanner reader = null;
        try {
            reader = new Scanner(this.client.getInputStream());
            writer = new PrintWriter(this.client.getOutputStream(), true);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        String line = "";

        while (!line.equals(".bye")) {


            //System.out.println("Got something? " + reader.hasNext()); 
            line = reader.nextLine();
            if (reader.hasNext()) {
                if (!line.equals(null)) {
                    System.out.println("Vom Client: " + line); 

                }
            }
            //writer.println("Admin-Message"); // Zum Testen

        }


    }
} 


感谢所有帮助我解决这个问题的人。

0 个答案:

没有答案