Wert versenden?

Status
Nicht offen für weitere Antworten.

Ocean-Driver

Bekanntes Mitglied
Hallo,


Ich hab ein kleines Programm - das nur einen einzelnen Wert versenden (und zugleich empfangen) muss. Wie mach ich das am besten?Die IP des anderen Rechners ist vorhanden.


danke

gruß
ocean-driver
 
T

tuxedo

Gast
Probiers mit RMI oder mit einer direkten Socketverbindung mit TCP oder UDP.

- Alex
 

Ocean-Driver

Bekanntes Mitglied
Hallo,


Ich hab mir jetzt mal nen Socket gebastelt. Nur irgendwie funktionierts nicht richtig.

Ich hab einmal eine eine "receiveData"-Klasse - die starte ich in einem Seperaten Thread und warte dort auf eine Anfrage:

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CommunicationSocket;

import java.io.IOException;
import java.net.Socket;

/**
 *
 * @author Ocean-Driver
 */
public class receiveData implements Runnable {
    
        private Socket client = null;
        
        
        public void run()
         {
        while(true)
        {
            try
            {
                System.out.println("Warte auf Anfrage im Server-thread..");
                
                client = Server.getInstance().getServerSocket().accept();
                CommunicationSocket.Server.getInstance().getValue(client);
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if(client != null)
                {
                    try
                    {
                        client.close();
                    }
                    catch(IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
       
    }
    
}


Dann habe ich eine Klasse Server die den Server "verwaltet" (startet, listenerPort setzen, verarbeiten von Daten eines Sockets):

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CommunicationSocket;

import Controll.Status;
import java.awt.Color;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;
import onlinecheck.OnlineCheckApp;


public class Server {
    
    private ServerSocket serverSocket = null;
    private Socket client = null;
    
    private int port=0;
    
    private static Server instance=null;
    
    
    
    public static Server getInstance()
    {
        if(instance==null)
        {
            instance = new Server();
        }
        
        return instance;
    }
    
    
    private Server() 
    {

    }
    
    public void startServer()
    {
        try
        {
        serverSocket = new ServerSocket(port);
        System.out.println("Server konnte gestartet werden.");
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        
    }
    
    public ServerSocket getServerSocket()
    {
        return  serverSocket;
    }
    
    public void setListenerPort(int port)
    {
        this.port = port;
    }
    
    public void getValue(Socket client) throws IOException
    {
        
    InputStream  in  = client.getInputStream(); 

    
    if(in.read() == 1)
    {   System.out.println("Signal 1 erhalten.");
        Status.setOtherOnlineStatus(true);
        onlinecheck.OnlineCheckView.LabelOtherOnlineStatus.setText("Online");
        onlinecheck.OnlineCheckView.LabelOtherOnlineStatus.setForeground(Color.GREEN);
    }
    else
    {   System.out.println("Signal 0 erhalten.");
        Status.setOtherOnlineStatus(false);
        onlinecheck.OnlineCheckView.LabelOtherOnlineStatus.setText("Offline");
        onlinecheck.OnlineCheckView.LabelOtherOnlineStatus.setForeground(Color.RED);
    }

    

    }

}


In der Client-Klasse versende ich den aktuellen Wert:

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package CommunicationSocket;

import Controll.Status;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;


public class Client {

    private Socket Server = null;
    private static Client instance=null;
    
    private String host=null;
    private int port=0;
    
    public static Client getInstance()
    {
        if(instance==null)
        {
           instance = new Client();
        }

           return instance;
    }
    
    
    private Client()
    { 

    }
    
    public void initConnection()
    {
        try
        {
          System.out.println("Baue Verbindung zu " + host + ":" + port + " auf");
          Server = new Socket(host,port);

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
    
    public void setHostAndPort(String host, int port)
    {
        this.host = host;
        this.port = port;
    }
    
    public void sendValue() 
    {
        initConnection();        
        
      try
      {
        OutputStream out = Server.getOutputStream(); 
        
      if(Status.isMeOnline())
        out.write(1);
      else
          out.write(0);
      }
      catch(Exception e)
      {
          System.out.println("Allgemeine Exception: " +e.getMessage());
      }
      finally
      {
        try
        {
           if(Server != null)
              Server.close();
           System.out.println("Schließe Verbindung!");
        }
        catch(Exception e)
        {
          System.out.println("Allgemeine Exception" +e.getMessage());
        }
      }

          
    }
    
    
    
}



eine Idee, warum das versenden / empfangen nicht richtig funktioniert?


Achja, meine Mainclass:

Code:
    public static void main(String[] args) {
        
        LoadFile.loadConfig();        //lädt die Daten aus einer Konfigurationsfile

        launch(OnlineCheckApp.class, args); //grafische Oberfläche
                
        CommunicationSocket.Server.getInstance().startServer(); //Server wird gestartet
        
        Thread ServerWaitThread = new Thread(new receiveData());    //Thread zum warten auf Daten angelegt
        ServerWaitThread.start(); //Thread wird gestartet

        CommunicationSocket.Client.getInstance().initConnection(); //Verbindung wird zum Server aufgebaut

        

        
    }


Das Programm ist zugleich Server und Client
 
S

SlaterB

Gast
damit es bei mit läuft, musste ich richtigen host + port angeben (localhost, 6777)
und vor allem noch sendValue() aufrufen, passiert bei dir nirgendwo?

----------

packages unbedingt klein schreiben, und importiere doch die Klassen bzw. beim eigenen Package nicht mal nötig

> client = Server.getInstance().getServerSocket().accept();
> CommunicationSocket.Server.getInstance().getValue(client);

hier sprichst du Server mal direkt an, mal mit CommunicationSocket.Server,
das ist schlimm,
 
T

tuxedo

Gast
Und fast noch schlimmer ist dass es zu "geht nicht richtig" keine Fehlermeldung gibt.....
 

Ocean-Driver

Bekanntes Mitglied
Hi,

Ja, send Value wird aufgerufen - in dem Event was aktiviert wird, wenn ich die Checkbox de/aktiviere.

Code:
       if(CheckBoxMeOnlineStatus.isSelected())
       {
           LabelMeOnlineStatus.setText("Online");
           LabelMeOnlineStatus.setForeground(Color.GREEN);
           
       }
       else
       {
           LabelMeOnlineStatus.setText("Offline");
           LabelMeOnlineStatus.setForeground(Color.RED);
       }
       
       Status.setMeOnlineStatus(CheckBoxMeOnlineStatus.isSelected());
       
       Client.getInstance().sendValue();


Den richtigen Port habe ich angegeben, der wird über die Methode loadConfig(); in loadFile{} gesetzt.

Es gibt garkeine Fehlermeldung. Nur irgendwie empfängt der Server nichts, wenn ich sendValue(); aufrufe
 
S

SlaterB

Gast
tja, ich kann nur beurteilen, was als Code vorliegt,
wenn darin was fehlt und du meinst, das steht an anderer Stelle korrekt, nun gut ;)

noch 2 Tipps:
1.
schreibe eine System.out.println()-Ausgabe in sendValue(); vor dem Senden,
vielleicht wirds doch nicht ausgeführt (keine Ausgabe)

2.
schaue dir meinen funktionierenden Code an, vielleicht hilfts irgendwo

Code:
public class Server
{
    private ServerSocket serverSocket = null;
    private int port = 6777;
    private static Server instance = null;

    public static Server getInstance()
    {
        if (instance == null)
        {
            instance = new Server();
        }
        return instance;
    }

    private Server()
    {
    }

    public void startServer()
    {
        System.out.println("startServer begin");
        try
        {
            serverSocket = new ServerSocket(port);
            System.out.println("Server konnte gestartet werden.");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        System.out.println("startServer end");
    }

    public ServerSocket getServerSocket()
    {
        return serverSocket;
    }

    public void setListenerPort(int port)
    {
        this.port = port;
    }

    public void getValue(Socket client)
        throws IOException
    {
        InputStream in = client.getInputStream();
        if (in.read() == 1)
        {
            System.out.println("Signal 1 erhalten.");
        }
        else
        {
            System.out.println("Signal 0 erhalten.");
        }
    }

    public static void main(String[] args)
    {
        Server.getInstance().startServer(); // Server wird gestartet
        Thread ServerWaitThread = new Thread(new receiveData()); // Thread zum warten
        // auf Daten angelegt
        ServerWaitThread.start(); // Thread wird gestartet
        Client.getInstance().initConnection(); // Verbindung wird zum Server aufgebaut
        Client.getInstance().sendValue();
    }
}

class Client
{
    private Socket Server = null;
    private static Client instance = null;
    private String host = "localhost";
    private int port = 6777;

    public static Client getInstance()
    {
        if (instance == null)
        {
            instance = new Client();
        }
        return instance;
    }

    private Client()
    {
    }

    public void initConnection()
    {
        try
        {
            System.out.println("Baue Verbindung zu " + host + ":" + port + " auf");
            Server = new Socket(host, port);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public void setHostAndPort(String host, int port)
    {
        this.host = host;
        this.port = port;
    }

    public void sendValue()
    {
        initConnection();
        try
        {
            OutputStream out = Server.getOutputStream();
            System.out.println("write 1");
            out.write(1);            
        }
        catch (Exception e)
        {
            System.out.println("Allgemeine Exception: " + e.getMessage());
        }
        finally
        {
            try
            {
                if (Server != null) Server.close();
                System.out.println("Schließe Verbindung!");
            }
            catch (Exception e)
            {
                System.out.println("Allgemeine Exception" + e.getMessage());
            }
        }
    }
}

class receiveData
    implements Runnable
{
    private Socket client = null;

    public void run()
    {
        while (true)
        {
            try
            {
                System.out.println("Warte auf Anfrage im Server-thread..");
                client = Server.getInstance().getServerSocket().accept();
                Server.getInstance().getValue(client);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (client != null)
                {
                    try
                    {
                        client.close();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
 

Ocean-Driver

Bekanntes Mitglied
Hi,


Ich hab oben die Methode stehen, die sendValue() aufruft.
Ich hab auch mal nen System.Out im sendValue() eingefügt, und er sendet auch immer 0 bsp. 1 - die daten sind auch richtig, ich mein - es kommt zu ner Verbindung. - aber nur das versenden klappt irgendwie nicht.

Ich hab deinen Code mit meinem vergleichen, finde aber auch keine großartigen Ändernungen (außer das du halt die Variablen direkt gesetzt hast)
 
K

Kampfidaggel

Gast
Der Code von Slater funktioniert erst, wenn du
Client.getInstance().initConnection();
aus Server.main() rausnimmst, da er sonst zweimal initConnection ausführt (einmal in sendValue(), und einmal in Server.main()).
 
S

SlaterB

Gast
hmm, verrückt, dann hats ja vorher gar nicht funktioniert,
ich habe wohl nur auf die 'Schließe Verbindung!'-Meldung nach Einbau von sendValue() geachtet ;)

mit nur einmal initConnection(); läuft es wesentlich besser, ja
 

Pappenheimer++

Bekanntes Mitglied
Falls das Problem immernoch existiert und sich deinem Verständnis enzieht, benutz doch mal Wireshark. Damit hast du dann den "totalen Überblick" ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
G Server schickt immer null-Wert Netzwerkprogrammierung 5
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
T E-Mail versenden. Netzwerkprogrammierung 8
L Versenden von "Bildschirm" Netzwerkprogrammierung 2
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
L Email versenden mit Java funktioniert nicht, Fehlermeldungen: MessagingException & SocketException Netzwerkprogrammierung 10
precoc String Array versenden Netzwerkprogrammierung 7
B Viele verschiedene E-Mails an unterschiedliche Empfänger schnell versenden? Netzwerkprogrammierung 8
S Email via Googlemail versenden Netzwerkprogrammierung 17
M Mail über Exchange versenden Netzwerkprogrammierung 13
P Dateiennamen versenden Netzwerkprogrammierung 4
P Mit Java Javascript-Anfrage versenden Netzwerkprogrammierung 4
T Objekte im NIO unblocking mode versenden Netzwerkprogrammierung 11
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
C An WebDAV einen "MKCOL" Befehl versenden Netzwerkprogrammierung 4
X Versenden von Objekten braucht zu lange Netzwerkprogrammierung 5
N Technologie zum versenden von Objects Netzwerkprogrammierung 5
Kr0e Versenden von Daten übers Netzwerk Netzwerkprogrammierung 30
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
N E-mail versenden Netzwerkprogrammierung 4
B Wie HTTP GET/POST Anfrage versenden? Netzwerkprogrammierung 7
T SWT Image versenden Netzwerkprogrammierung 2
T Einzelne Bits per Socket versenden Netzwerkprogrammierung 16
F Link erzeugen und versenden Netzwerkprogrammierung 4
G Datein versenden funktioniert nicht ! Netzwerkprogrammierung 19
S Objekt Felder versenden Netzwerkprogrammierung 5
A Konflikt: Blocking und Non-Blocking bei Objekte versenden Netzwerkprogrammierung 4
O Über Socket Array versenden Netzwerkprogrammierung 5
G Bytes versenden Netzwerkprogrammierung 9
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
B Strings versenden | Nur 1 Client Netzwerkprogrammierung 6
P Objekte über DatagramSocket versenden Netzwerkprogrammierung 12
V Kann keine DatagramPackets versenden von einem Jar Archiv Netzwerkprogrammierung 4
J Problem beim versenden von eigenen Objekten über RMI Netzwerkprogrammierung 2
S Dateien versenden Netzwerkprogrammierung 16
C Dateien über Sockets versenden? Netzwerkprogrammierung 10
F IP "versenden" Netzwerkprogrammierung 6
N *.* Dateien versenden im Lan Netzwerkprogrammierung 5
H Versenden von Objekt Netzwerkprogrammierung 2
L JavaMail: Versenden von mails funktioniert nicht Netzwerkprogrammierung 7
P Array per Socketverbindung versenden Netzwerkprogrammierung 2
O Sms versenden Netzwerkprogrammierung 5
T Dateien wia P2P Connection versenden Netzwerkprogrammierung 2
S E-Mails versenden. Netzwerkprogrammierung 10
D Bits über UDP versenden Netzwerkprogrammierung 3
M generelle Frage zum Versenden Netzwerkprogrammierung 4
T Mit JavaMail API Faxe versenden? Netzwerkprogrammierung 5
K Files versenden Netzwerkprogrammierung 5

Ähnliche Java Themen


Oben