Java einfaches client - /server-console-chat-Anwendung

Ich möchte erstellen Sie eine einfache server-client-Anwendung, aber ich denke, es ist etwas falsch mit den IO-Streams. Es gibt keine GUI, damit das chat-geschehen soll über die Konsole( Sie können öffnen 2 eclipse, um es zu testen oder was auch immer IDE Sie verwenden).

hier ist mein server code:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    ServerSocket serverSocket;
    Socket connection; //connection-to-client
    ObjectOutputStream output;
    ObjectInputStream input;

    public void run() {
        try {
            serverSocket = new ServerSocket(6000, 100);
        } catch (IOException e) {
            System.err.println("Invalid port number");
        }
        while (true) {
            try {
                waitForConnection();
                getIOStreams();
                processConnection();
            } finally {
                closeConnection();
            }
        }
    }

    public void closeConnection() {
        try {
            input.close();
            output.close();
            connection.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void waitForConnection() {
        System.out.println("Server is ready to accept conenctions");
        try {
            connection = serverSocket.accept(); //code will stop here until a
                                                //connection occurs
            System.out.println("Conenction established with the client");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void getIOStreams() {
        try {
            output = new ObjectOutputStream(connection.getOutputStream());
            output.flush(); //send header information to the client, which
                            //contains info required to create the input stream
                            //object
            input = new ObjectInputStream(connection.getInputStream());
            System.out.println("Server established I/O streams");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void processConnection() {
        sendData("Connection established with the server");
        String inputMessage = "";
        new Runnable() {
            Scanner sc = new Scanner(System.in);

            public void run() {
                while (true) {
                    sendData(sc.nextLine());
                }
            }
        };
        do {

            try {
                inputMessage = (String) input.readObject();
                System.out.println(inputMessage);
            } catch (ClassNotFoundException e) {
                System.err.println("Object of an unknown type was recieved");
            } catch (IOException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }
        } while (inputMessage.equals("QUIT"));
    }

    public void sendData(String s) {
        try {
            output.writeObject(s);
            output.flush();
            System.out.println("Server: " + s);
        } catch (IOException e) {
            System.err.println("Error writting the message");
        }
    }
}

und dies ist mein client-code

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {
    ServerSocket serverSocket;
    Socket clientSocket;
    ObjectOutputStream output;
    ObjectInputStream input;
    String serverAddress = "127.0.0.1";

    public void run() {
        connect2Server();
        getIOStreams();
        processConnection();
        closeConnection();
    }

    public void connect2Server() {
        System.out.println("Trying to connect to the server");
        try {
            clientSocket = new Socket(serverAddress, 6000);
        } catch (UnknownHostException e) {
            System.err.println("Server unavailable");
            System.exit(1);
        } catch (IOException e) {
            //TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void getIOStreams() {
        try {
            output = new ObjectOutputStream(clientSocket.getOutputStream());
            output.flush();
            input = new ObjectInputStream(clientSocket.getInputStream());
            System.out.println("Client established I/O Stream");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void processConnection() {
        sendData("Connection established with the client");
        String inputMessage = "";
        new Runnable() {
            Scanner sc = new Scanner(System.in);

            public void run() {
                String outputMessage = "";
                do {
                    outputMessage = sc.nextLine();
                    sendData("Client: " + outputMessage);
                } while (outputMessage.equals("QUIT"));
            }
        };
        while (true) {

            try {
                inputMessage = (String) input.readObject();
                System.out.println(inputMessage);
            } catch (ClassNotFoundException e) {
                System.err.println("Object of an unknown type was recieved");
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(1);
            }
        }
    }

    public void sendData(String s) {
        try {
            output.writeObject(s);
            output.flush();
            System.out.println("Client: " + s);
        } catch (IOException e) {
            System.err.println("Error writting the message");
        }
    }

    public void closeConnection() {
        try {
            output.close();
            input.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

zum ausführen des server-oder client-schreiben Sie einfach im wesentlichen client/server.run();
bitte sagen Sie mir, was ist mein Fehler und wie man es beheben 🙂

Ich bin zu faul, um zu gehen durch Ihren code ... bitte angeben, welche Fehlermeldung du bekommst oder was Sie erwartet, zu bekommen
inputMessage = (String) input.readObject(); Ausnahme happends in dieser Zeile(das ist von der client-Klasse)...was ich erwarte ist einen scanner zu Lesen, was ich Schreibe in die Konsole und es erscheint auf der Konsole des Servers und Umgekehrt

InformationsquelleAutor blenddd | 2011-10-11

Schreibe einen Kommentar