********Hallo,
ich habe eine Client-Socket Anwendung geschrieben, bei der der Client einfach nur auf Knopfdruck eine Nachricht an den Server schicken soll. Das klappt auch ganz gut, solange ich „localhost“ verwende. Sobald ich aber meine IP-Addresse oder meine DynDNS Addresse verwende, bekomme ich zwar eine Verbindung, aber die Nachricht wird nicht gesendet… Die Nachricht wird nur gesendet. wenn ich danach den OutputStream schließe. Da das ganze mit localhost funktioniert, muss es ja irgendwie an meiner Verbindung liegen, doch die Firewall auszuschalten hat nichts gebracht. Den Port habe ich natürlich weitergeleitet. Ich benutze den Router W921v der Telekom. Wie gesagt, ich habe ja eine Verbindung, aber die Nachrichten werden nicht gesendet!?
Client:
Java Code:
[ol]
[li]import java.awt.event.ActionEvent; [/li][li]import java.awt.event.ActionListener; [/li][li]import java.io.BufferedWriter; [/li][li]import java.io.IOException; [/li][li]import java.io.OutputStreamWriter; [/li][li]import java.net.InetSocketAddress; [/li][li]import java.net.Socket; [/li][li]import java.net.UnknownHostException; [/li][li] [/li][li]import javax.swing.JButton; [/li][li]import javax.swing.JFrame; [/li][li] [/li][li]public class Client { [/li][li] private Socket socket; [/li][li] public static void main(String[] args) { [/li][li] new Client().connect(); [/li][li] } [/li][li] [/li][li] public void connect() { [/li][li] try { [/li][li] socket = new Socket(); [/li][li] socket.connect(new InetSocketAddress(„localhost“, 5001), 3000); [/li][li] JFrame frame = new JFrame(); [/li][li] frame.setSize(500,500); [/li][li] frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); [/li][li] JButton btn = new JButton(„Klick“); [/li][li] btn.addActionListener(new ActionListener() { [/li][li] public void actionPerformed(ActionEvent e) { [/li][li] try { [/li][li] sendMessage(„Hi“); [/li][li] } catch (IOException e1) { [/li][li] // TODO Auto-generated catch block [/li][li] e1.printStackTrace(); [/li][li] } [/li][li] } [/li][li] }); [/li][li] frame.add(btn); [/li][li] frame.setVisible(true); [/li][li] } catch (UnknownHostException e) { [/li][li] // TODO Auto-generated catch block [/li][li] e.printStackTrace(); [/li][li] } catch (IOException e) { [/li][li] // TODO Auto-generated catch block [/li][li] e.printStackTrace(); [/li][li] } [/li][li] } [/li][li] [/li][li] public void sendMessage(String s) throws IOException { [/li][li] BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); [/li][li] writer.write(s); [/li][li] writer.newLine(); [/li][li] writer.flush(); [/li][li] } [/li][li]} [/li][/ol]
Server:
Java Code:
[ol]
[li]import java.io.BufferedReader; [/li][li]import java.io.InputStreamReader; [/li][li]import java.io.PrintWriter; [/li][li]import java.net.ServerSocket; [/li][li]import java.net.Socket; [/li][li] [/li][li]public class Server { [/li][li] [/li][li] public static void main(String[] args) { [/li][li] new Server().go(); [/li][li] } [/li][li] [/li][li] public void go() { [/li][li] try { [/li][li] @SuppressWarnings(„resource“) [/li][li] ServerSocket serverSocket = new ServerSocket(5001); [/li][li] while(true) { [/li][li] Socket clientSocket = serverSocket.accept(); [/li][li] Thread t = new Thread(new ClientHandler(clientSocket)); [/li][li] t.start(); [/li][li] System.out.println(„Connection“); [/li][li] } [/li][li] } catch(Exception e) { [/li][li] e.printStackTrace(); [/li][li] } [/li][li] } [/li][li] [/li][li] public class ClientHandler implements Runnable { [/li][li] private BufferedReader br; [/li][li] private Socket socket; [/li][li] private PrintWriter pw; [/li][li] [/li][li] public ClientHandler(Socket clientSocket) { [/li][li] try { [/li][li] socket = clientSocket; [/li][li] br = new BufferedReader(new InputStreamReader(socket.getInputStream())); [/li][li] } catch(Exception e) { [/li][li] e.printStackTrace(); [/li][li] } [/li][li] } [/li][li] [/li][li] public void run() { [/li][li] try { [/li][li] String msg; [/li][li] while ((msg = br.readLine()) != null) { [/li][li] System.out.println(msg); [/li][li] } [/li][li] } catch(Exception e) { [/li][li] e.printStackTrace(); [/li][li] } [/li][li] } [/li][li] } [/li][li] [/li][li]} [/li][/ol]
Hoffentlich könnt ihr mir helfen, jede noch so kleine Idee wäre schon etwas
Viele Grüße
=== fälschlicherweise zusammengeführt ===
// EDIT GAST 2
ich wollte mich eigentlich über fehlerhafte tags aufregen, bis ich auf „erweitert“ geklickt habe
entweder haut das code-plugin nich richtig hin oder der IE11 macht mal wieder irgendwas was nich standard is
zum code selbst
auch wenn das ganze ziemlich wild aussieht ist es syntaktisch korrekt (sonst würde es ja auch nicht über localhost laufen)
ich hätte jetzt zwar in zeile 45 eher ein PrintStream out=new PrintStream(socket.getOutputStream());
genutzt und dann einfach auf out.println()
gebaut, aber so wie du es hast geht es ja auch
vor allem weil das flush()
ja auch kommt
ich würde testweise einfach mal die länge der nachricht erhöhen
damit meine ich aber nicht nur so ein oder zwei buchstaben, sondern schon mal was richtig großes um die 2kB
es kann sein das dein speedport mist baut und auf ein volles TCP-paket wartet (bei DSL mit ner MTU von 1492 glaub ich)
oder es kann einfach nicht korrekt mit „hairpin-connections“ umgehen, daher einfach mal über n zweiten anschluss (also z.b. von nem freund) aus testen lassen
ich hab mal zum test deinen code compiled und an meinem system getestet
Cable-Modem : Scientific Atlanta SA EPC2203
Router : DIR-100 v1.14DE
und bei mir funktioniert es auch wenn ich mich „extern“ anspreche (so wohl IP als auch DynDNS)
fehler am code also auszuschließen
frag mal google nach deinem router modell