Ich muss eine Anwendung erstellen, die Daten aus einem Netzwerk empfangen und diese Daten verwenden kann, um einige nicht relevante Dinge mit zu tun.Sockets in Java ...?
Hier ist ein Stück Code, um klar zu machen, was ich mache.
Auf der Serverseite:
static Socket client = null;
static ServerSocket ss = null;
if (ss != null) {
ss.close();
}
ss = new ServerSocket(5513);
isrunning = true;
System.out.println("Waiting for client...");
client = ss.accept();
System.out.println("Client accepted.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
Und die Client-Seite:
Socket client = null;
PrintWriter out = null;
try {
client = new Socket("hostname", 5513);
out = new PrintWriter(client.getOutputStream(), true);
}
Bitte beachten Sie, dass dies nur ein Stück des Codes ist. Es gibt keine Fehler im Code.
Nach dem Ausführen des serverseitigen Codeabschnitts wird ordnungsgemäß auf die Verbindung des Clients gewartet.
Jetzt kommt hier das Problem. Sobald ich versuche, mich von der Client-Seite aus zu verbinden, bekomme ich einen "Verbindung verweigert" -Fehler.
JEDOCH habe ich etwas im Internet gefunden, das mir gesagt hat, ich solle Telnet von der Client-Seite aus versuchen. Lassen Sie beispielsweise die serverseitige IP 192.168.1.1 lauten. Also, nach der Verwendung dieses Befehls:
telnet 192.168.1.1 5513
Ich bekomme tatsächlich eine Verbindung mit dem Server. Der Befehl startet einen leeren Bildschirm, und alles, was ich manuell in die Befehlszeile eintippe, wird nach dem Drücken der Eingabetaste an die Server-Seite gesendet (überprüft mit Debugging).
So kann ich manuell mit der Server-Seite verbinden und einige Daten senden, aber mein Code verweigert die Verbindung.
Wer weiß, was ich falsch mache?
Ich bin mir nicht sicher, warum genau Ihr scheitert, aber ich habe Sockets leicht mit diesen beiden Tutorials laufen: http://android-er.blogspot.com/2011/01/implement-simple-socket-server-in. html und http://android-er.blogspot.com/2011/01/simple-communication-using.html – HannahMitt
@HannahMitt, vergaß er eine 'while' Schleife. Der Server lauscht nicht länger als eine Sekunde auf Verbindungen. Sobald der Server EINE Verbindung hergestellt hat, ist es fertig und hört nicht mehr zu. –
Wie gesagt, das ist nur ein Teil des Codes. Ich verwende tatsächlich eine while-Schleife. Außerdem wartet die accept() - Methode auf die Herstellung einer Verbindung, sodass ich den Server stundenlang warten lassen kann, um die erste Verbindung herzustellen. Danach wird für eine andere Verbindung zum Start eine Schleife erstellt. –