Klassen Funktionen aus anderen Klassen benutzen

merasil

Mitglied
Hallo ihr :)
ich bin gerade an der Umsetzung einer Client/Server Kommunikation mit Sockets und dabei auf ein Problem gestoßen, welches eher allgemeiner Natur ist.
Ich habe mir die StreamInput und Output Methoden in ne eigene Klasse mit eigener Methode gepackt um nicht ständig einen kompletten Block von diesen Anweisungen schreiben zu müssen.
Seit dem klappt aber irgendwie nichts mehr richtig und ich komme einfach nicht drauf warum :(
Aus irgendeinen Grund macht der Server erst was mit dem eingehenden Stream nachdem ich die Programmausführung des Clients abgebrochen habe. Das Senden von Client zu Server scheint zu funktionieren... Zumindest sagt das eine erste Wireshark-Analyse.
Hier der Code für den Server:
Java:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;


public class Server {
    private static boolean listening;
    private static boolean dhke;
    private static int key;
    private static int p = 17;
    private static int g = 2;
    private static int secret = 7;
   
    public static String functions(String s) {
        String[] cmd = s.split(" ");
       
        switch(cmd[0]) {
            case "UPPERCASE":
                return "OK "+cmd[1].toUpperCase();
            case "LOWERCASE":
                return "OK "+cmd[1].toLowerCase();
            case "SPIEGELN":
                char[] reverse = cmd[1].toCharArray();
                String reversed = "";
                for(int i = reverse.length-1; i > -1; i--) {
                    reversed += reverse[i];
                }
                return "OK "+reversed;
            case "DHKE":
                dhke = true;
                return "Bitte Geheimnis eingeben:";
            case "BYE":
                return "BYE";
            case "SHUTDOWN":
                if(cmd[1].equals("xyz1234")) {
                   listening = false;
                    return "BYE";
                }
                return "WRONG PASSWORD!";
            default:
                return "UNGÜLTIGER BEFEHL";
        }
    }
   
    public static void main(String[] args) throws IOException{
        ServerSocket ss = new ServerSocket(1234);
        String inp;
        String answer;
       
        listening = true;
       
        while(listening) {
            try (Socket s = ss.accept()) {
                inp = COC.readStream(s);
                System.out.println("Stream gelesen");
                answer = functions(inp);
                System.out.println("Funktion ausgeführt");
                COC.writeStream(s, answer);
                if (dhke == true) {
                    COC.writeStream(s, "Primzahl:");
                    COC.writeStream(s, String.valueOf(p));
                    COC.writeStream(s, "Generator:");
                    COC.writeStream(s, String.valueOf(g));
                    inp = COC.readStream(s);
                   
                    key = DHKE.KeyCalc(secret, Integer.parseInt(inp), p);
                    int pubKey = DHKE.PubKeyCalc(secret, g, p);
                   
                    answer = String.valueOf(pubKey);
                    COC.writeStream(s, answer);
                }
            s.close();
            }
        }
    }
}

Code vom Client:
Java:
import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    private static int key;
    private static int secret;
    private static int p;
    private static int g;
   
    public static void main(String[] args) throws IOException {
        boolean writing = true;
        String inp;
        String answer;
        String cmd;
       
        while(writing) {
            System.out.println("Bitte Command eingeben:");
            Scanner sc = new Scanner(System.in);
            cmd = sc.nextLine();
           
            try (Socket s = new Socket("127.0.0.1", 1234)) {
                COC.writeStream(s, cmd);
                inp = COC.readStream(s);
                System.out.println(inp);
               
                if(inp.equals("Bitte Geheimnis eingeben:")) {
                    System.out.print(COC.readStream(s));
                    p = Integer.parseInt(COC.readStream(s));
                    System.out.println(p);
                    System.out.print(COC.readStream(s));
                    g = Integer.parseInt(COC.readStream(s));
                    System.out.println(g);
                   
                    int pubKey = DHKE.PubKeyCalc(secret, g, p);
                    answer = String.valueOf(pubKey);
                   
                    COC.writeStream(s, answer);
                    inp = COC.readStream(s);
                   
                    key = DHKE.KeyCalc(secret, Integer.parseInt(inp), p);
                    System.out.println(key);
                }  
               
                if (inp.equals("BYE")) {
                    writing = false;
                }
                //COC.connClose(s);
                s.close();
            }
        }
    }
}

Hier der Code der COC
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class COC {   
    public static void connClose(Socket s) throws IOException {
        s.close();
    }
   
    public static String readStream(Socket s) throws IOException {
        InputStream rein = s.getInputStream();
        BufferedReader buff = new BufferedReader(new InputStreamReader(rein));
       
        String answer = buff.readLine();
        System.out.println("gelesen");
        return answer;
    }
   
    public static void writeStream(Socket s, String answer) throws IOException {
        OutputStream raus = s.getOutputStream();
        PrintStream ps = new PrintStream(raus, true);
       
        ps.print(answer);
        System.out.println("geschrieben");
    }
}
 

merasil

Mitglied
Du öffnest jedes Mal einen neuen Socket, wiederverwende den alten. ;) Das while im Client ist überflüssig.
Das while beim client brauch ich wenn ich mehrere Commands rübersenden will. Aber du hast recht, man könnte es zumindest weiter nach unten im Code verschieben, dass kein neuer Socket aufgemacht wird bis ich fertig bin im Client...
Aber beim Server mache ich doch nur einen neuen Socket auf wenn sich jemand verbindet oder? Ich übergebe ja an COC.writeStream bzw. COC.readStream den Socket s, welchen ich vorher erstellt habe... Oder sehe ich das ganz falsch?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Erste Schritte Bisektion mit zwei Funktionen? Java Basics - Anfänger-Themen 1
J Verständnisfrage zu throws neben Funktionen Java Basics - Anfänger-Themen 2
A Variablen Definitionen zu Codes und Funktionen. Java Basics - Anfänger-Themen 3
Z If Funktionen, GUI, Fachklasse Java Basics - Anfänger-Themen 25
H Frage zu Methoden/Funktionen Java Basics - Anfänger-Themen 3
M Vererbung Funktionen in Basisklasse deklarieren Java Basics - Anfänger-Themen 4
J Funktionen auf der Rückgabe eines Stacks (pop) Java Basics - Anfänger-Themen 6
J Funktionen Java Basics - Anfänger-Themen 9
S Klassen Class mit Funktionen importieren Java Basics - Anfänger-Themen 1
B Funktionen von außen aufrufen Java Basics - Anfänger-Themen 1
G funktionen der super-klasse von der super-klasse Java Basics - Anfänger-Themen 6
R Funktionen Synchron laufen lassen Java Basics - Anfänger-Themen 10
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
A ganzrationale funktionen auswerten. Java Basics - Anfänger-Themen 1
S Funktionen/Atrribute nur innerhalb einer package Zugänglich machen Java Basics - Anfänger-Themen 8
Z Differenz zwischen 2 Daten berechnen, ohne importiere Funktionen! Java Basics - Anfänger-Themen 10
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
K Methoden Funktionen und Prozeduren Java Basics - Anfänger-Themen 11
R Rekursionen und Funktionen ... Java Basics - Anfänger-Themen 8
J Funktionen automatisiert aufrufen Java Basics - Anfänger-Themen 5
B Funktionen programmieren, die im Hintergrund aktiv sind Java Basics - Anfänger-Themen 2
O Funktionen dateiübergreifend mit Packages Java Basics - Anfänger-Themen 6
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
M Methoden Funktionen Java Basics - Anfänger-Themen 6
M Erste Schritte Fenster Und VB Funktionen Java Basics - Anfänger-Themen 8
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
0 Reguläre Ausdrücke und Funktionen Java Basics - Anfänger-Themen 2
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
B Ausgabe problem in Funktionen Java Basics - Anfänger-Themen 6
L Hat java keine virtuellen funktionen?? Java Basics - Anfänger-Themen 6
A Funktionen und Arrays Java Basics - Anfänger-Themen 2
C funktionen nur static? Java Basics - Anfänger-Themen 6
M MouseAdapter - auf Funktionen zugreifen Java Basics - Anfänger-Themen 13
L Funktionen addRow und deleteRow Java Basics - Anfänger-Themen 6
D Mathematische Funktionen Zeichnen Java Basics - Anfänger-Themen 2
D Variableninhalt über mehrere Funktionen ? Java Basics - Anfänger-Themen 3
Out.println Funktionen Java Basics - Anfänger-Themen 7
D Verständnisfrage zu Funktionen Java Basics - Anfänger-Themen 6
B Mathematische Funktionen Java Basics - Anfänger-Themen 3
D Warum sollte ich bestehende Funktionen "extend"en? Java Basics - Anfänger-Themen 32
M Statische und nicht-statische Funktionen: Desktop.browse(uri); Java Basics - Anfänger-Themen 4
N Funktionen berechnen in Java Java Basics - Anfänger-Themen 18
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
Q Nach Stringvorgabe bestimmte funktionen ausführen Java Basics - Anfänger-Themen 3
K zwei Funktionen, ein BufferedReader? Java Basics - Anfänger-Themen 8
A Static in Funktionen bringen Java Basics - Anfänger-Themen 7
J Funktionen in Java? Java Basics - Anfänger-Themen 3
A frage zur integration von funktionen anderer klassen Java Basics - Anfänger-Themen 2
T Funktionen Plotter - Klassen/Methoden/Funktionen Java Basics - Anfänger-Themen 13
A ChatGUI: Scrollbar und Funktionen Java Basics - Anfänger-Themen 5
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
W Funktionen mit Default werten Java Basics - Anfänger-Themen 10
G Müssen globale Funktionen immer "static" sein? Java Basics - Anfänger-Themen 13
S Überladen von Funktionen vermeiden Java Basics - Anfänger-Themen 5
B Funktionen ausführen vorm Beenden des Programmes Java Basics - Anfänger-Themen 13
M Mathematische Funktionen zeichnen. Java Basics - Anfänger-Themen 2
A mathematische Funktionen grafisch darstellen Java Basics - Anfänger-Themen 8
G Funktionen? Java Basics - Anfänger-Themen 7
S 2 regex-Funktionen benötigt Java Basics - Anfänger-Themen 4
S anzahl von funktionen Java Basics - Anfänger-Themen 9
B in der .Jar funktionieren nicht alle Funktionen Java Basics - Anfänger-Themen 18
X Threads+Funktionen Java Basics - Anfänger-Themen 6
S Explorer funktionen nachprogrammieren Java Basics - Anfänger-Themen 2
P Rexex - stringtokenizer - String funktionen allgemein Java Basics - Anfänger-Themen 3
G Problem mit nicht statischen Funktionen Java Basics - Anfänger-Themen 7
S Return bei Funktionen Java Basics - Anfänger-Themen 8
ven000m Rekursive Funktionen - Frage Java Basics - Anfänger-Themen 16
D Funktionen/Methoden/Variablen includieren? :) Java Basics - Anfänger-Themen 4
V funktionen/Variablen f. unterschiedliche Klassen definierne? Java Basics - Anfänger-Themen 6
M mehreren klassen die gleichen funktionen bereitstellen? Java Basics - Anfänger-Themen 3
G Über undo, copy, cat, paste, delete Funktionen Java Basics - Anfänger-Themen 3
S Rekursive Funktionen in imperative Funktionen umwandeln Java Basics - Anfänger-Themen 2
Niki_Tesla 2 Fragen / Funktionen? Java Basics - Anfänger-Themen 4
B Code von Java-Funktionen einsehen Java Basics - Anfänger-Themen 2
B Mathematische funktionen Berechnen und ausgeben lassen?WIE? Java Basics - Anfänger-Themen 2
H Parameterübergabe zwischen einzelnen Funktionen Java Basics - Anfänger-Themen 4
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Gibt es einen anderen Weg um "{}" in IntelliJ zu schreiben? Java Basics - Anfänger-Themen 5
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
I XML und Interfaces aus anderen Projekten Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
M Aufruf von statischen Methoden einer anderen Klasse Java Basics - Anfänger-Themen 15
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 6
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben