tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
560
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    NiciB NiciB ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    122
    Hallo!

    Ich habe ein kleines Programm geschrieben um die Funktion von Threads und Sockets zu verstehen!

    Und zwar gibt es eine main-class die die Threads erzeugt.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
     
     
    public class lightarray {
     
        /**
         * @param args
         */
     
        public static void main(String[] args){             
     
            Thread t1 =   new Thread( new server() );  
            t1.  start();  
     
            Thread t2 =   new Thread( new client() );  
            t2.  start();
     
        }
    }

    eine weitere Klasse ist der Server der auf einem Port auf die Client Anfragen hört!

    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
    
    import java.net.*;
    import java.io.*;
     
     class server implements Runnable{
     
        /**
         * @param args
         */
        public void run() {
            try{
            ServerSocket server = new ServerSocket(1234);
            while(true){
                Socket client = server.accept();
                InputStream input = client.getInputStream();
                OutputStream output = client.getOutputStream();
                int zahl1=input.read();
                int zahl2=input.read();         
                output.write(zahl1 + zahl2);    
                output.flush();
                System.out.println(input.read());
                System.out.println(input.read());
                server.close();
                input.close();
                output.close();
                
            }
            }catch (IOException e){
                System.out.print(e);
            }
        }   
    }

    die client Klasse soll Anfragen an den Server stellen können und dann eine Antwort erhalten. Und zwar sollen per Tastatur 2 Zahlen eingegeben werden, die dann zum Server geschickt werden, der sie zusammenzählt und ausgibt. Das funktioniert auch ganz gut, nur das Problem ist, dass ich nach der Ausgabe wieder zur Eingabe der nächsten 2 Zahlen kommen sollte und ich weiß nicht wie ich das hinkriege. Ich kann also immer eine Rechnung pro Programmstart durchführen!

    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
    
    import java.net.*;
    import java.io.*;
     
    public class client  implements Runnable{
     
        /**
         * @param args
         */
        int x,y;
        
        public void run() {     
            while(true){
            try{
            
            Socket server = new Socket("localhost", 1234);
            InputStream input = server.getInputStream();
            OutputStream output = server.getOutputStream();
            
            BufferedReader myInput = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("x: ");
            x = Integer.parseInt(myInput.readLine());
            System.out.print("y: ");
            y = Integer.parseInt(myInput.readLine());
            output.write(x);
            output.write(y);        
            output.flush();
            System.out.println(input.read());
            System.out.println(input.read());
            server.close();
            input.close();
            output.close(); 
            }catch (IOException e){
                System.out.print(e);
            }
            }
        }
    }

    Ich verwende 2 Threads da der eine immer auf einem Port auf Anfragen warten muss und beim anderen sollen die Eingaben gemacht werden. Es soll nach einer Rechenoperation wieder zum Eingabe-Thread gewechselt werden.
     

  2. #2
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    Hi,
    versuche es mal damit die Zeile

    Code :
    1
    
    server.close();

    im Server durch ein

    Code :
    1
    
    client.close();

    zu ersetzen, dann sollte es laufen !

    Viel Code von einer Klasse in die andere kopiert was ?
    Da schleichen sich schnell fehler ein !

    Ich würde auch erst die Streams schließen dann erst den Socket !

    Immer andersherum wie beim öffnen !

    Gruß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

  3. #3
    NiciB NiciB ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    122
    ich habe jetzt server.close(); durch client.close(); ersetzt. Die Streams schließe ich nun auch vor den Socket.

    Leider komme ich aber immer noch nicht wieder zur Eingabe zurück, das Problem besteht also weiterhin.
     

  4. #4
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    Hallo,

    Vorab, du wechselst ja nicht zwischen den Threads, sondern die Java-VM
    führt parallel beide Threads aus !


    Zum Fehler, du hast ein
    Code :
    1
    
    System.out.println(input.read());
    zuviel im client !

    Da blockt der client-Thread dann im read() !
    Bei mit funktioniert es ohne die Zeile dann !

    Im übrigen Klassenbezeichnungen in Java - GROSS !

    Gruß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

  5. #5
    NiciB NiciB ist offline Mitglied Gold
    Registriert seit
    Apr 2004
    Beiträge
    122
    super, danke! Jetzt funktioniert es!

    Ich habe im Server auch noch diese Zeilen rausgelöscht:

    Code :
    1
    2
    
    System.out.println(input.read());
    System.out.println(input.read());

    die Klassen hab ich natürlich auch noch groß geschrieben...
     

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 24.11.05, 13:56
  2. SWT und Threads
    Von smith99 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 27.12.04, 23:34
  3. Threads
    Von Caruso_Nix im Forum Java
    Antworten: 22
    Letzter Beitrag: 16.11.04, 21:32
  4. Threads in MFC
    Von darkworx im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 13.05.04, 10:35
  5. Threads
    Von xerses im Forum Delphi, Kylix, Pascal
    Antworten: 0
    Letzter Beitrag: 17.03.04, 21:24