Java-Client/Server-chat-Raum-das senden von Nachrichten als Objekte

Mein Ziel ist ein server, der eine Nachricht empfängt, die ObjectInputStream-Objekt aus, und klicken Sie dann echos, das Message-Objekt ObjectOutputStream.

Beim schreiben einer Nachricht, sendet der client die Message-Typ-Objekt auf dem server, wird die empfangene Nachricht vom Typ Objekt (sowie der Message type-Objekt von anderen clients mit dem server verbunden) wird dann empfangen und dekodiert, um die client-gui.

Dem Message-Objekt einen String-und die andere font-Informationen.

Mein problem ist, dass der server kein echo zurück, geben Sie die Nachricht Objekt. Ich habe das Gefühl, dass ich nicht Gießen richtig, aber an diesem Punkt bin ich nur zum Angeln mit dem Versuch verschiedene Dinge.

Die Idee ist, den server transparent vom Kunden - ist dies möglich, sprich: der server weiß nichts über die TestObject-Klasse? Gibt es eine Möglichkeit, um dieses?

Server-code:

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

public class Server
{
    public SimpleServer() throws IOException, ClassNotFoundException
    {
        ServerSocket ss = new ServerSocket(4000);
        Socket s = ss.accept();

        ObjectInputStream ois = new ObjectInputStream(s.getInputStream());

        ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());

        //the 'echo' functionality of the server
               Object to = null;
        try 
        {
            to = ois.readObject();
        } 
        catch (ClassNotFoundException e)
        {
            System.out.println("broke");
            e.printStackTrace();
        }

        oos.writeObject(to);
        oos.flush();

        //close the connections
        ois.close();
        oos.close();

        s.close();
        ss.close();
    }

    public static void main(String args[]) throws IOException, ClassNotFoundException {
        new SimpleServer();
    }
}

Client-code:

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

public class Client
{
    public SimpleClient() throws IOException, ClassNotFoundException
    {
        Socket s = new Socket( "localhost", 4000 );

        ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
        ObjectInputStream  ois = new ObjectInputStream( s.getInputStream());

        TestObject to = new TestObject( 1, "object from client" );

        //print object contents
        System.out.println( to );

        oos.writeObject(to);
        oos.flush();
        Object received = ois.readObject();

        //should match original object contents
        System.out.println(received);

        oos.close();
        ois.close();
    }

    public static void main(String args[]) throws IOException, ClassNotFoundException
    {
        new SimpleClient();
    }
}

class TestObject implements Serializable
{
    int value ;
    String id;

    public  TestObject( int v, String s )
    {
        this.value=v;
        this.id=s;
    }

    @Override
    public String toString()
    {
        return  "value=" + value +
                ", id='" + id;
    }
}

Vielen Dank für Ihre Zeit!

BEARBEITEN:
Dies ist die Ausgabe erzeugt:

Bekomme ich diese Meldung, wenn der client eine Verbindung zum server:
Exception in thread "main" java.lang.ClassNotFoundException: TestObject

- Und dies ist die client-Ausgabe, wenn ich den client ausführen:
Wert=1, id='Objekt vom client Exception in thread "main" java.net.SocketException: Connection reset

  • Welchen output bekommen Sie?
  • Ich bekomme diese Meldung, wenn der client eine Verbindung zum server: Exception in thread "main" java.lang.ClassNotFoundException: TestObject, Und dies ist die client-Ausgabe, wenn ich dem client ausgeführt werden: Wert=1, id='Objekt vom client Exception in thread "main" java.net.SocketException: Connection reset
InformationsquelleAutor mmm_robots | 2013-10-29
Schreibe einen Kommentar