tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
689
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sebbi_kaempferisch sebbi_kaempferisch ist offline Grünschnabel
    Registriert seit
    Mar 2006
    Beiträge
    3
    Hallo,
    wir sind zu dritt und schreiben gerade an einem Java Projekt für die UNI.
    Vorher haben wir uns die Arbeit in 3 Teile aufgeteilt.
    1.GUI
    2.Client-/ServerProgrammierung
    3.Spielalgorithmen

    Es handelt sich um ein Kartenspiel welches man auch im Netzwerk gegeneinander spielen kann.
    Hier im Beispiel: angenommen es haben sich 3 Clienten als Spieler angemeldet und der Server spielt auch mit..

    Das Probelm: Die Verbindung vom Server und Clienten steht, die Streams sind definiert. Man soll als Client einen Nickname eingeben können, dieser soll in einem anderen GUI-Fenster (auch andere Klasse!!) ausgegeben werden.

    Meine Frage: Wie kann ich mir die Eingabe holen (get....), den String als Paket an den Server senden...dann muss dieser ja den String an die Clienten zurückschicken und in dem Ausgabefenster ausgeben (auf einem Label). Das Ziel ist das bevor der Server das Spiel freigibt, eine Liste mit allen Teilnehmer entsteht..

    Kann uns jemand weiterhelfen
    Würde uns auch über Links oder eventuelle Verweise auf andere Threads freuen..

    Sollte meine Erklärung nicht ausreichen, bitte kurz posten, bin die ganze Zeit online und kann sofort Verständnissprobleme klären.. weiß ja wie das ist, wenn man sich alles schon vorstellen kann ist es immer wesentlich leichter

    Vielen Dank!
     

  2. #2
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Servus.

    Vielleicht ist es einfacher, wenn du den Code postest!?
    Also nicht den ganzen. Aber die Schlüsselstellen.
    Oder du schreibst einfach was ihr wie (Verbindung, stream) realisiert habt.
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  3. #3
    sebbi_kaempferisch sebbi_kaempferisch ist offline Grünschnabel
    Registriert seit
    Mar 2006
    Beiträge
    3
    ok,
    wir haben es mit Input und Output Streams realisiert..
    Es gibt 4 Klassen: Server, ServerDienst, Client, ClientDienst..
    Die Dienst Klassen realisieren den Thread der im Hintergrung läuft..
    Ich füge hier eben alle die 4 Klassen ein:

    Server.java:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    
    import java.net.*;
    import java.io.*;
     
    public class Server extends Thread 
    {
        boolean stoprequested;
        int counter = 0;
        ServerSocket echod;
        InputStream in;
        OutputStream out;
        Socket[] socket = new Socket[4];
        ServerDienst outThread;
        
        
        Server()
        {
            try
            {
                echod = new ServerSocket(8);
                this.stoprequested = false;
            } catch (IOException e)
            {
                System.err.println("Fehler bei Konstruktor EchoServer: " + e.toString());
            }
        }
        
        public synchronized void requestedStop()
        {
            stoprequested = true;
        }
        
        public void run()
        {
            try
            {
                do
                {
                    socket[counter] = echod.accept();
                    in = socket[counter].getInputStream();
                    outThread.start();
                    sendString(socket[counter], "[EchoServer says: Connection #" + counter + " accepted");
                    counter++;
                }while (counter < 4 || !stoprequested);
            }catch ( IOException e)
            {
                System.err.println("Fehler bei ServerThread.run(): " + e.toString());
            }
        }
        
        public void sendString(Socket socket, String sendString)
        {
            try
            {
                System.out.println("gesendet: " + sendString);
                out = socket.getOutputStream();
                String line = (sendString);
                out.write(line.getBytes());
                out.write('~');
            } catch (IOException e)
            {
                System.err.println("Fehler bei sendString(): " + e.toString());
            }
        }
     
    }


    ServerDienst:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    
    import java.net.*;
    import java.io.*;
     
    public class Server extends Thread 
    {
        boolean stoprequested;
        int counter = 0;
        ServerSocket echod;
        InputStream in;
        OutputStream out;
        Socket[] socket = new Socket[4];
        ServerDienst outThread;
        
        
        Server()
        {
            try
            {
                echod = new ServerSocket(8);
                this.stoprequested = false;
            } catch (IOException e)
            {
                System.err.println("Fehler bei Konstruktor EchoServer: " + e.toString());
            }
        }
        
        public synchronized void requestedStop()
        {
            stoprequested = true;
        }
        
        public void run()
        {
            try
            {
                do
                {
                    socket[counter] = echod.accept();
                    in = socket[counter].getInputStream();
                    outThread.start();
                    sendString(socket[counter], "[EchoServer says: Connection #" + counter + " accepted");
                    counter++;
                }while (counter < 4 || !stoprequested);
            }catch ( IOException e)
            {
                System.err.println("Fehler bei ServerThread.run(): " + e.toString());
            }
        }
        
        public void sendString(Socket socket, String sendString)
        {
            try
            {
                System.out.println("gesendet: " + sendString);
                out = socket.getOutputStream();
                String line = (sendString);
                out.write(line.getBytes());
                out.write('~');
            } catch (IOException e)
            {
                System.err.println("Fehler bei sendString(): " + e.toString());
            }
        }
     
    }

    Client:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
    import java.net.*;
    import java.io.*;
     
    public class Client extends Thread
    {
        InputStream in;
        OutputStream out;
        Socket socket;
        ClientDienst outThread;
        String ownName, host;
        
     
        Client(String host, String ownName)
        {
            this.ownName = ownName;
            this.host = host;
        }
        
        public void run()
        {
            try
            {
                socket = new Socket(host, 8);
                in = socket.getInputStream();
                outThread = new ClientDienst(in);
                outThread.start();
                sendString(ownName);
            }catch (IOException e)
            {
                System.err.println("Fehler im run() vom ClientDienst: " + e);
            }
        }
        
        public void sendString(String sendString)
        {
            try
            {
                System.out.println("gesendet: " + sendString);
                out = socket.getOutputStream();
                String line = sendString;
                out.write(line.getBytes());
                
            } catch (IOException e)
            {
                System.err.println("Fehler beim senden des Strings: " + e);
            }
        }
        
    }

    ClientDienst:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InterruptedIOException;
     
    public class ClientDienst extends Thread
    {
        InputStream in;
        boolean stoprequested;
        static String x = "", clientName, clientIP, fragetyp, frage;
        
        public ClientDienst(InputStream in)
        {
            super();
            this.in = in;
            stoprequested = false;
        }
        
        public synchronized void requestedStop()
        {
            stoprequested = true;
        }
        
        public void run()
        {
            int len = 0;
            try
            {
                while (!stoprequested)
                {
                    try
                    {
                        int c;
                        while ((c = in.read()) != -1 )
                        {
                            if(c == '~')
                            {
                                break;
                            }
                            x += (char) c;
                        }
                        
                        saveString();
                        x = "";
                        
                    } catch (InterruptedIOException e)
                    {}
                }
            } catch (IOException e)
            {
                System.err.println("OutputThread: " + e.toString());
            }
        }
        
        public String saveString()
        {
            return ("Hier werden mal Strings versendet");
        }
     
    }
     

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    nur so als Ideenstütze. Wieso definierst du dir nicht ein NetworkListener
    Interface mit einer Methode dataReceived oder so.
    Ungefähr so:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    interface NetworkListener{
        public void dataReceived(String data);
    }
     
    interface NetworkDevice extends Runnable{
        public void addNetworkListener(NetworkListener toAdd);
    }
     
    class Server implements NetworkDevice{
        private NetworkListener l;
        private boolean dataReceived;
        private String data;
     
        public void run(){
            //...
            if(dataReceived){
                l.dataReceived(data);
            }
        }
        public void addNetworkListener(NetworkListener toAdd){
            l = toAdd;
        }
    }
     
    class Client implements NetworkDevice{
        private NetworkListener l;
        private boolean dataReceived;
        private String data;
     
        public void run(){
            //...
            if(dataReceived){
                l.dataReceived(data);
            }
        }
     
        public void addNetworkListener(NetworkListener toAdd){
            l = toAdd;
        }
    }
     
    class GUIDummy{
     
        private NetworkDevice net;
     
        GUIDummy(boolean client){
            if(client)
                net = new Client();
            else
                net = new Server();
            net.addNetworkListener(new NetworkListener(){
                public void dataReceived(String data){
                    //updateGUI(data);
                }
            });
            new Thread(net).start();
        }
    }

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  5. #5
    sebbi_kaempferisch sebbi_kaempferisch ist offline Grünschnabel
    Registriert seit
    Mar 2006
    Beiträge
    3
    in class GUIDummy kann er doch aber so nicht aus dem Objekt net von NetworkDevice ein Objekt Client erstellen, also:
    NetwortkDevice net = new Client();

    zeigt zumindest eine Fehlermeldung an:

    Type mismatch: cannot convert from Client to NetworkDevice
     

  6. #6
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    ich meine auch nicht die Klasse NetworkDevice aus java.net.
    Schau dir doch bitte mal den kompletten Sourcecode an. Da hab ich ein
    Interface namens NetworkDevice definiert. Das kannst du nat auch umbnenennen
    wenn du magst.

    Gruß

    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

Ähnliche Themen

  1. VB.NET: Dateitypen mit Projekt verknüpfen
    Von Terminator2 im Forum .NET Datenverwaltung
    Antworten: 4
    Letzter Beitrag: 18.05.08, 13:54
  2. Projekt für die Schule (Java + MySQL)
    Von Schatti im Forum Java
    Antworten: 4
    Letzter Beitrag: 10.06.06, 10:18
  3. Java Projekt starten?
    Von nex_m im Forum Java
    Antworten: 12
    Letzter Beitrag: 18.05.06, 00:20
  4. Learning by Doing - Ein Projekt von Java-Anfängern
    Von shevron_deluca im Forum Java
    Antworten: 5
    Letzter Beitrag: 07.10.05, 11:31
  5. Java oder PHP MS Projekt Simulation
    Von BSA im Forum Java
    Antworten: 4
    Letzter Beitrag: 01.03.05, 21:03