Ich versuche eine Anwendung zu machen, in die Sie zwei Zahlen eingeben, die Zahlen werden analysiert und über TCP-Protokoll an den Server gesendet und dann hinzugefügt, zurückgegeben und zurückgesetzt zu einem TextField. Das Problem ist, dass die Methode run() nicht auf die Eingabe der Zahlen wartet, im Gegensatz zu BufferedReader-Streams. Ich arbeite derzeit mit DataInputStream und DataOutPutStream.run() -Methode wartet nicht auf Dateneingabe
Hier ist der Code unten!
public class Server implements Runnable {
public Server(){
}
@Override
public void run() {
while (true) {
try (ServerSocket serverSocket = new ServerSocket(1000);
Socket sSocket = serverSocket.accept();
DataInputStream in = new DataInputStream(sSocket.getInputStream());
DataOutputStream out = new DataOutputStream(sSocket.getOutputStream()))
{
System.out.println("Client connected.");
Integer s1 = in.read();
Integer s2 = in.read();
Integer result = s1 + s2;
out.write(result);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
}
und die Client-Klasse:
bs.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ke) {
n1 = Integer.parseInt(tf1.getText());
n2 = Integer.parseInt(tf2.getText());
tf1.setText(String.valueOf(n1));
tf2.setText(String.valueOf(n2));
}
});
}
@Override
public void run() {
try(Socket clientSocket = new Socket("localhost", 1000);
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()))
{
out.write(n1);
out.write(n2);
Integer rezultat = in.read();
tf3.setText(String.valueOf(result));
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
Und ich fange sowohl über die Hauptklasse und Themen. Vielen Dank im Voraus! : D
Welche 'run()' Methode - die ein im Kunden? Wenn ja, wie und wann fangen Sie an? – Kenney
Den Ganzzahlen wird beim Ausführen des Projekts der Standardwert 0 zugewiesen, weil die Methode run() in der Server-Klasse nicht darauf wartet, dass ich die Werte eingibt und den Knopf drücke ... Ich starte beide Klassen über Threads in der Hauptklasse. –
Das Problem liegt wahrscheinlich in dem Code, den Sie nicht veröffentlicht haben. Die Idee ist: Der Server öffnet eine ServerSocket - nur einmal, nicht in einer Schleife - und akzeptiert Verbindungen - in einer Schleife. Wenn auf der Serverseite "Client connected" angezeigt wird, hat Ihr Client eine Verbindung hergestellt, was bedeutet, dass die Methode 'run' im Client ausgeführt wurde. Mein Verständnis ist, dass Ihr Kunde eine Taste neben den 2 Textfeldern hat, und Sie beabsichtigen, dass, wenn Sie es drücken, der Server kontaktiert wird, um die Hinzufügung durchzuführen? Wenn dies der Fall ist, möchten Sie den Client-Thread nicht in 'main' starten, sondern im Event-Handler für den Button drücken. – Kenney