Client soll auf Knopfdruck vom Server warten

Status
Nicht offen für weitere Antworten.

Lazybone

Aktives Mitglied
Hallo

ich habe mal wieder ein Problem und zwar ich will das wenn ich den Client starte er sich zum Server verbindet und dort wartet bis beim Server ein Knopf gedrückt wird. Nur leider beendet sich mein Programm immer beim Thread für die Verbindung beim Server. Hier mal das was ich bis jetzt hinbekommen habe.

Client:
Code:
import java.net.*;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.*;
import java.awt.image.BufferedImage;

/**
 *
 * @author Lazybone
 */
public class Main {
    
    public static Socket s = null;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{
    
        connect_to_server("localhost", 1234);
        
    }
    
    public static void connect_to_server(String ip, int port) {

        try{
           s = new Socket(ip, port);          
        }catch(Exception e){
//            System.out.println(e);
            System.out.println("Konnte keine Verbindung mit den Server aufbauen");
        }
        
    }
    
}


Server:
Code:
import java.net.*;
import java.io.*;
import java.util.*; 

/**
 *
 * @author Lazybone
 */
public class Main {
    
    public static void main(String args[]) {
       
        NewJFrame fenster = new NewJFrame();
        fenster.setVisible(true);
        
        try
        {
        ServerSocket server = new ServerSocket(1234);
        Socket s;
        while(true) {
            s = server.accept();
            ServerThread t = new ServerThread(s);
            t.start();
        }
        }catch(Exception e){
            System.out.println("Konnte Server nicht starten");
        }
    }
}

Code:
public class NewJFrame extends javax.swing.JFrame {
    
    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents() {
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jButton1.setText("jButton1");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jButton1)
                .addContainerGap(227, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jButton1)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>                        
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    // End of variables declaration                   
    
}

Code:
import java.net.*;
import java.io.*;
import java.util.*; 

public class ServerThread extends Thread {
    private Socket s;
    public ServerThread(Socket s) {
        this.s = s;
    }
    
    public void run() {
        try{
        }catch(Exception e){
            System.exit(1);
        }
    }
}

und genau bei ServerThread run Methode bricht er ab.

Gruß
Lazybone
 
Wo nichts ist, kann auch nichts abgebrochen werden, deine run-Methode ist ja leer, da gibt es nichts zu tun :wink:

Sockets haben einen Input und einen OutputStream (getInput/OutputStream). Diese beiden Streams kannst du benutzen um Daten zu verschicken.
In diesem Fall könnte z.B. der Client jeweils an seinem InputStream auf einen Befehl vom Server warten (der dies über seinen OutputStream schickt), und nach erhalt schreibt der Client irgendetwas in seinen OutputStream (was wiederum der Server über seinen InputStream liest).
 
ja ich will da das er Client sagt Hey Server ich bin online sag mir was ich machen soll dann will ich mit den Knopf z.b. ne aktion beim Client starten. Nur bei mir beendet sich der Client ja auch wenn ich mit input and output sachen arbeite
 
Dann wäre es interessant zu sehen, wie du mit diesen Input/Output-Sachen arbeitest.

Und lass dein Programm Fehlermeldungen ausgeben! Vielleicht kriegst du eine, und die liefern viele Informationen, was falsch sein könnte.
Code:
try{
  ...
}catch(Exception e){
  e.printStackTrace();
}
 
Code:
package de.digitmedia.remotecontrol.client;

import java.net.*;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.*;
import java.awt.image.BufferedImage;

/**
 *
 * @author Lazybone
 */
public class Main {
    
    public static Socket s = null;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{
    
        connect_to_server("localhost", 1234);
        
        
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        out.write("Hej Server ich bin da sag mir was ich machen soll");
        out.newLine();
        out.flush();
        
        
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String in_text = in.readLine(); 
        System.out.println(in_text);
        System.out.println("test");
        
        out.close();
        in.close();
        
    }
    
    public static void connect_to_server(String ip, int port) {

        try{
           s = new Socket(ip, port);          
        }catch(Exception e){
//            System.out.println(e);
            System.out.println("Konnte keine Verbindung mit den Server aufbauen");
        }
        
    }

    
}

Code:
package de.digitmedia.remotecontrol.server;

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

public class ServerThread extends Thread {
    private Socket s;
    public ServerThread(Socket s) {
        this.s = s;
    }
    
    public void run() {
        try{

            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String in_text = in.readLine();
            System.out.println(in_text);
            System.out.println("test");

            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            out.write("Sag ich dir gleich");
            out.newLine();
            out.flush();
            
            
           
            
            out.close();
            in.close();
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

So sieht mein programm jetzt aus der Client bekommt allerdings nicht den text vom server er gibt nur null aus.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben