Hallo zusammen,
ich lerne zur Zeit mit Hilfe von Head First Java, wie ich Netzwerkprogrammierung angehe. Ich habe auch ein kleines Projekt zum Lernen im Auge (eine Art Terminal), aber schon bei den Grundlagen komme ich nicht weiter. Ich habe wirklich schon einige Tutorials durchgearbeitet, aber geholfen hat mir das nicht.
Die Ausgangssituation ist die, dass ich ein Socket zu einem Server öffne. Ich erstelle dann zwei Threads und gebe diesen das Socket an. Der eine Thread soll in einer Endlosschleife einfach - sobald er etwas empfängt - diesen Text auf System.out ausgeben. Der andere Thread wartet 1 Sekunde und sendet einen Befehl an den Server, worauf dieser eigentlich reagieren müsste... und hier liegt das Problem.
Der EmpfängerThread erhält die Begrüßung vom Server und gibt diese aus. Dann sendet der zweite Thread einen Befehl an den Server, aber der EmpfängerThread gibt einfach nichts mehr aus. Die Daten werden auch korrekt gesendet, das habe ich mit Hilfe eines lokalen Mini-Servers getestet.
Die zwei Runnables sehen so aus:
und das Hauptprogramm sieht so aus
Der Output auf der Konsole sieht so aus:
Received: 200 news.usenetserver.com Welcome! (fe04.ams2)
Sent: "help"
Und dann hörts auf. Wenn ich mich allerdings mit telnet mit dem selben Server verbinde und "help" eingebe, erhalte ich einige Zeilen Text. Das möchte ich durch das Programm auch erreichen.
Wenn jemand einen Hinweis hat, wo das Problem liegt, wäre ich sehr dankbar. Ich habe mitlerweile etliche Stunden damit verbracht, aber bin mittlerweile absolut ratlos...
Viele Grüße,
Björn
ich lerne zur Zeit mit Hilfe von Head First Java, wie ich Netzwerkprogrammierung angehe. Ich habe auch ein kleines Projekt zum Lernen im Auge (eine Art Terminal), aber schon bei den Grundlagen komme ich nicht weiter. Ich habe wirklich schon einige Tutorials durchgearbeitet, aber geholfen hat mir das nicht.
Die Ausgangssituation ist die, dass ich ein Socket zu einem Server öffne. Ich erstelle dann zwei Threads und gebe diesen das Socket an. Der eine Thread soll in einer Endlosschleife einfach - sobald er etwas empfängt - diesen Text auf System.out ausgeben. Der andere Thread wartet 1 Sekunde und sendet einen Befehl an den Server, worauf dieser eigentlich reagieren müsste... und hier liegt das Problem.
Der EmpfängerThread erhält die Begrüßung vom Server und gibt diese aus. Dann sendet der zweite Thread einen Befehl an den Server, aber der EmpfängerThread gibt einfach nichts mehr aus. Die Daten werden auch korrekt gesendet, das habe ich mit Hilfe eines lokalen Mini-Servers getestet.
Die zwei Runnables sehen so aus:
Java:
package core;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReceiveDataRunnable implements Runnable {
private Socket s;
private InputStream in;
public void run() {
BufferedReader d = new BufferedReader(new InputStreamReader(in));
try {
while (true) {
System.out.println("Received: " + d.readLine());
}
} catch (Exception e) {}
}
public void setSocket(Socket s) throws IOException {
this.s = s;
this.in = s.getInputStream();
}
}
Java:
package core;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
public class SendDataRunnable implements Runnable {
private Socket s;
private PrintWriter writer;
public void run() {
try {
Thread.sleep(1000);
System.out.println("Sent: \"help\"");
writer.write("help");
writer.flush();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void setSocket(Socket s) throws IOException {
this.s = s;
writer = new PrintWriter(s.getOutputStream());
}
}
und das Hauptprogramm sieht so aus
Java:
package core;
import java.net.Socket;
public class TestSpace {
public static void main(String[] args) {
new TestSpace().go();
}
private void go() {
try {
Socket s = new Socket("news.usenetserver.com", 119);
SendDataRunnable sdr = new SendDataRunnable();
sdr.setSocket(s);
ReceiveDataRunnable rdr = new ReceiveDataRunnable();
rdr.setSocket(s);
Thread sd = new Thread(rdr);
Thread sc = new Thread(sdr);
sd.start();
sc.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Der Output auf der Konsole sieht so aus:
Received: 200 news.usenetserver.com Welcome! (fe04.ams2)
Sent: "help"
Und dann hörts auf. Wenn ich mich allerdings mit telnet mit dem selben Server verbinde und "help" eingebe, erhalte ich einige Zeilen Text. Das möchte ich durch das Programm auch erreichen.
Wenn jemand einen Hinweis hat, wo das Problem liegt, wäre ich sehr dankbar. Ich habe mitlerweile etliche Stunden damit verbracht, aber bin mittlerweile absolut ratlos...
Viele Grüße,
Björn
Zuletzt bearbeitet: