Socket-server, wartet auf Nachricht von client zu Lesen
Habe ich die folgenden socket-server in java,
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MiddleSocket {
private ServerSocket middleman;
private int port = 1027;
private Socket client;
protected void createSocketServer()
{
try
{
middleman = new ServerSocket(port);
client = middleman.accept();
middleman.close();
PrintWriter out = new PrintWriter(client.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
System.out.println("echo: " + in.readLine());
out.println("test");
}
}
catch(IOException e)
{
System.out.println(e);
}
}
}
Funktioniert es einwandfrei, wie es sich liest aus dem client und alles. Allerdings möchte ich den socket-server, nur versuchen, und Lesen, wenn es eine Nachricht vom client, da in der Schleife, die Sie hält zu Lesen, selbst wenn keine Nachrichten vom client empfangen werden, werden diese Ausgänge eine Reihe von
echo: null
Gibt es einen Mechanismus, kurze wait()
zu haben, die while-Schleife zu kennen, um einfach nur sitzen und warten und dann auslösen, wenn eine Nachricht vom client zu Lesen, dass die Botschaft und einmal, die Nachricht Lesen und eine Antwort gesendet, dann sitzen Sie gerade im Leerlauf, bis die nächste Nachricht vom client empfangen wird?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach etwas tun, wie folgt:
Dieser sollte die zu erwartende Verhalten.
Edit:
hier ist ein vollständiges Beispiel, was ich neulich in den Kommentaren, die mit Ihrem code:
.accept
Befehl sollte dann behandeln was auch immer der Eingang aus, der sich verbindende client und schließt dann die Verbindung und wartet auf eine neue. Ich werde ändern Sie meine Antwort mit einem Beispiel.ready()
test muss entfernt werden, da sonst die Schleife wird beendet, sobald der socket receive-buffer leer ist. Es gibt wenige, wenn überhaupt, richtig verwendet, diese Einrichtung.Können Sie InputStream.read(), oder InputStream.read(byte[]). Beide blockieren
Hier ist ein Beispiel
Weil Sie ignorieren das Ende des Stroms, was die null bedeutet. Es bedeutet nicht, dass es keine Nachrichten vom client überhaupt. Es bedeutet, dass der peer die Verbindung geschlossen hat.