Socket Client als GUI

chuvak

Aktives Mitglied
Ich befasse mich seit Kurzem mit Socketprogrammierung. Habe einen einfachen Server und einen Client geschrieben.
Der Server erhält vom Client zwei Zahlen (5 und 10), rechnet sie zusammen und gibt über die Konsole das Ergebnis (15) aus.

Server:
Java:
package server;

import java.net.*;
import java.io.*;
import javax.swing.*;

public class Server extends JFrame{

    ServerSocket server = new ServerSocket(1234);

    public Server() throws IOException {
        super("Server");
        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();
            input.close();
            output.close();
        }
    }

    public static void main(String[] args) {
        try {
            Server server = new Server();
        } catch (IOException ioe) {
            System.out.println(ioe);
            System.exit(1);
        }

    }
}

Client:
Java:
package client;

import java.net.*;
import java.io.*;
import java.awt.*;
import javax.swing.*;

public class Client{

    String ip = "localhost";
    int port = 1234;
    JTextField tfNachricht = new JTextField(20);

    public Client() throws IOException {
        this.setLayout(new GridLayout(1, 3));
        this.add(tfNachricht);

        Socket server = new Socket("localhost", port);
        InputStream input = server.getInputStream();
        OutputStream output = server.getOutputStream();
        output.write(5);
        output.write(10);
        output.flush();
        System.out.println(input.read());
        server.close();
        input.close();
        output.close();
    }

    public static void main(String[] args) {
        try {
            Client Client = new Client();
        } catch (IOException ioe) {
            System.out.println(ioe);
            System.exit(1);
        }
    }
}

Ich möchte das Ganze jetzt mit einer GUI versehen. Mit Swing kenne ich mich zwar aus, trotzdem gelingt es mir hier nicht.
Wenn ich eine weitere Main-Klasse erstelle, sie von JFrame ableite und den Client vom JPanel, müsste ich ja den Client auf die Main-Klasse adden können.

Java:
package client;

import java.io.*;
import javax.swing.*;

public class Main extends JFrame {

    public Main() {
        super("Client");
        this.setVisible(true);
        this.setSize(500, 400);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        try {
            Client client = new Client();
            this.add(client);

            System.out.println("ja");
        } catch (IOException ioe) {
            System.out.println(ioe);
        }
    }

    public static void main(String[] args) {
        Main main = new Main();
    }
}

Es erscheint zwar ein Fenster, es ist aber völlig leer...

Kann mir bitte jemand helfen?
 

KrokoDiehl

Top Contributor
Auf einen JFrame kannst du nur Swing-Komponenten hinzufügen. Dein Client ist das ja gar nicht. Was du machen musst, ist eine GUI zusammenbauen, in der der Benutzer seine Zahlen eingeben kann (zB zwei JTextFields), du brauchst eine Anzeige für das Ergebnis (zB JLabel) und irgendwas dass die Berechnung auslöst ...zB über einen JButton.

Außerdem solltest du erst die ganze GUI zusammenbauen und einrichten und den
Code:
setVisible()
-Aufruf vom JFrame als letztes machen.

*edit*
Ah ok, ich habe jetzt erst gesehen, dass du in der Client-Klasse JTextField's etc benutzt. Dennoch solltest du dich erstmal mit Swing-GUIs allgemein und mit Layout-Managern etwas vertrauter machen. Deine Client-Klasse müsste JPanel erweitern, damit du es auch auf einen Frame packen kannst.
Eigentlich dürfte der gepostete Code noch nicht einmal kompilieren...
 
Zuletzt bearbeitet:

chuvak

Aktives Mitglied
Auf einen JFrame kannst du nur Swing-Komponenten hinzufügen. Dein Client ist das ja gar nicht. Was du machen musst, ist eine GUI zusammenbauen, in der der Benutzer seine Zahlen eingeben kann (zB zwei JTextFields), du brauchst eine Anzeige für das Ergebnis (zB JLabel) und irgendwas dass die Berechnung auslöst ...zB über einen JButton.

Außerdem solltest du erst die ganze GUI zusammenbauen und einrichten und den
Code:
setVisible()
-Aufruf vom JFrame als letztes machen.

*edit*
Ah ok, ich habe jetzt erst gesehen, dass du in der Client-Klasse JTextField's etc benutzt. Dennoch solltest du dich erstmal mit Swing-GUIs allgemein und mit Layout-Managern etwas vertrauter machen. Deine Client-Klasse müsste JPanel erweitern, damit du es auch auf einen Frame packen kannst.
Eigentlich dürfte der gepostete Code noch nicht einmal kompilieren...

Wir bereits geschrieben, kenne ich mich etwas mit Swing aus.
Das Beispiel oben war nur die 1. Version des Clients, nämlich Konsolenbasiert.
Mein Wunsch ist es, das vom JPanel abzuleiten und das dann der Main-Klasse (JFrame) hinzuzufügen. Wie das normalerweise geht, weiß ich, allerdings nicht im Zusammenhang mit Socketprogrammierung. Denn da bleibt das Fenster einfach leer.

Wie bereits geschrieben:
chuvak hat gesagt.:
Wenn ich eine weitere Main-Klasse erstelle, sie von JFrame ableite und den Client vom JPanel, müsste ich ja den Client auf die Main-Klasse adden können.
 

KrokoDiehl

Top Contributor
Oh eh ja ... gut hätte ich mal genauer lesen müssen. Dennoch liegt dein leerer Frame daran, dass du
Code:
setVisible()
zu früh aufrufst, nämlich bevor die GUI überhaupt irgendwie aufgebaut (gelayoutet) wurde:
[JAVA=8] public Main() {
super("Client");
this.setVisible(true); //verschiebe das hier einfach mal ans Ende im try-Block.
this.setSize(500, 400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

try {
Client client = new Client();
this.add(client);

System.out.println("ja");
} catch (IOException ioe) {
System.out.println(ioe);
}
}
[/code]

chuvak hat gesagt.:
[...] allerdings nicht im Zusammenhang mit Socketprogrammierung
Prinzipiell ist das kein Unterschied, denn eine Konsole ist auch nur eine Art von UI (User Interface, halt kein grafisches). Eine Swing-GUI ist daher nur eine andere Darstellung. Ob darin was mit Sockets gemacht wird, ist eigentlich egal, zumindest in diesem einfachen Beispiel. Bei komplexeren Dingen muss man natürlich achtsamer sein, denn Operationen auf Sockets sind (idR) blockierend und das könnte dazu führen, dass die GUI einfriert, was nicht hübsch ist.

Deinen Client musst du gar nicht umschreiben, so mischst du nicht GUI und Logik. Mach eine eigene Klasse ...oder von mir aus auch im JFrame... wo du die GUI aufbaust (Textfelder, Labels, ...) und dann über einen Button deine bisherigen Client-Logik ansprichst, die dann das mit dem Socket regelt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
hieuhp132 Server wird nicht auf zweiten Anfrage von Client geupdated Netzwerkprogrammierung 3
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
J Client Server - Serialisierung Netzwerkprogrammierung 8
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben