# Client-Server Chat Problem nur im lokalen Netztwerk



## spyboot (27. Jun 2008)

Hab mir einen Java Chat gebastelt der funzt allerdings nur im lokalen Netztwerk wenn ich versuche von einem anderem rechner aus der sich nicht in meinem Netztwerk befindet einen Verbindungsversuch zu starten schlägt dieser fehl. Meine übertragung ist paketbasiert und zum Testen innerhalb dess Netztwerks stehen mir ein Xp und ein vista Pc zur verfügung. Es wäre nett wenn mir einer helfen könnte.
Danke im voraus

-Euer Problemfall


----------



## CyD (27. Jun 2008)

spyboot hat gesagt.:
			
		

> schlägt dieser fehl.



1. Gibts ne Fehlermeldung? Wenn ja bitte posten.

2. Hast du die Firewall deaktiviert bzw einen Port freigegeben?

Versuch deine Frage nicht zu sehr zu verallgemeinern, kannst ruhig ins Detail gehen ;-)

gruss
CyD


----------



## spyboot (27. Jun 2008)

1. mir ist keine fehlermeldung bekannt (auf entfernten rechner keine möglichkeit fehler abzufangen / anzuzeigen).
2. Ja aber die sagt nichts und erstellt auch keinen log eintrag

-gibt es eine Möglichkeit eine Firewall zu umgehen/Netztwerkzugriff über Firewall?


----------



## spyboot (28. Jun 2008)

Kann es sein dass DatagrammSocket nur innerhalb eines Netztwerkes funkt :?: 
Client Socket:

```
InetAddress ia = InetAddress.getByName( meineserverip ); //Ivp4 adresse hab ich aus Konsole(cmd) mit "ipconfig" erfahren
 byte[] raw = "testestest".getBytes();  //String in Byte Array
 DatagramPacket packet = new DatagramPacket( raw, raw.length, ia, port );  //Packet "packen"
 DatagramSocket dSocket = new DatagramSocket();  //Socket bauen
 dSocket.send( packet );  //und senden.
```

^^Is jetzt nur vom aufbau her gleicher Code^^
Einer ne Idee? muss ich um Daten übers Internet zu schicken irgendwas machen?  :###


----------



## Lulumann6 (29. Jun 2008)

ich denke auch das die firewall dran schuld ist, also auch bei allen firewalls port freigeben (windowsfirewall, und auch die vom router)



> InetAddress ia = InetAddress.getByName( meineserverip ); //Ivp4 adresse hab ich aus Konsole(cmd) mit "ipconfig" erfahren


die internett ip, kannst du gar nicht von der konsole erfahren, dazu musst du z.b. zu www.wieistmeineip.de hin.[/code]


----------



## FArt (30. Jun 2008)

spyboot hat gesagt.:
			
		

> 1. mir ist keine fehlermeldung bekannt (auf entfernten rechner keine möglichkeit fehler abzufangen



Wieso?


----------



## spyboot (30. Jun 2008)

OK!

Den fehler mit der Ip hab ich jetzt behoben :idea: , danke explizit an Lulumann6.
Allerdings besteht der fehler dass ich zum server nun garkeine verbindung aufbauen kann (auch nicht im lokalen neztwerk).

Habe nun *sämtliche* Firewalldienste (firewall-/geminsamer internetzugriff-dienst, securety-center dienst,windows defender-dienst) und AntivirenProgramme deaktiviert -ohne erfolg-.

Nochmal:

-Pc ist in einem Netztwerk
-Socket verbindung
-auch der Chat "client" erstell einen SocketServer

-Danke im voraus für eure Antworten  :meld:


@FArt Is der Pc von nem Freund und der hatt nur die java standart version (habs ihm als .jar file geschickt)-Wär schon zu kompliziert im zu erklären in der Konsole (fremdbegriff) den Befehl (fremdbegriff!) java (fremdbegriff!!!) einzugeben :!:


----------



## FArt (1. Jul 2008)

Wenn du Logging in deine Software einbauen würdest, könntest du das Logfile analysieren.

Ohne Fehlermeldungen wird das wohl ein Rumgestocher bleiben.



> Allerdings besteht der fehler dass ich zum server nun garkeine verbindung aufbauen kann (auch nicht im lokalen neztwerk).


Na klasse, jetzt kannst du den Fehler nachstellen und eine Fehlermeldung posten.


----------



## Lulumann6 (1. Jul 2008)

ich denke er meint nur, das er sich im lan befindet, weil der andere rechner 5 meter weg steht, aber wenn man die internetip nimmt, leuft das alles nicht mehr über lan sondern über inet und damit hat er natürlich wieder das selbe problem wie sonst mit dem inet

ich sags nur nochmal firewall vom *router* umstellen (du weist doch hoffentlich was der router ist), falls du das wirklich schon erledigt hast, kannst du diese bemerkung vergessen.


----------



## spyboot (4. Jul 2008)

Lulumann6 hat gesagt.:
			
		

> ich sags nur nochmal firewall vom *router* umstellen (du weist doch hoffentlich was der router ist), falls du das wirklich schon erledigt hast, kannst du diese bemerkung vergessen.



-die Firewall meines  routers (in diesem fall w-lan, ja!)  ist bereits deaktiviert aber trotzdem danke für den tip...


@FArt dass Problem ist dass es definitiv *keine* fehlermeldung gibt der client wartet nur nen halbes jarhundert mit socket.recive und server schickt dass paket ab dass aber nicht ankommt.

Dass deutet zwar alles auf eine firewall hin (nachricht wird korrekt abgeschickt kommt aber leider nicht an)  mir ist aber nicht klar was ich noch alles deaktivieren soll...


----------



## angelchr (6. Jul 2008)

hi,

ich sag nur Stichwort *NAT* !!!!!!


chat 192.168.2.2 ==> router 192.168.2.1 ==> INET 87.173.241.100 ==> 87.173.241.103 INET ==> router 192.168.1.1 ==> 192.168.1.3 ==> Chat.


Mit welcher Adresse stellst du die Verbindung her? Mit der öffentlichen oder mit der privaten ??

Gruß


----------



## Gelöschtes Mitglied 5909 (6. Jul 2008)

wenn er die private (LAN) Adresse nimmt hat er keine NAT Probleme...


----------



## angelchr (6. Jul 2008)

richtig die hat er dann nicht. Allerdings erreicht er dann auch keinen empfänger der sich hinter seinem router befindet[/b]


----------



## Wildcard (6. Jul 2008)

Was hat das mit Firewall zu tun? NAT war das richtige Stichwort. Portforwarding einrichten, oder einen der üblichen Tricks wie UDP hole punching verwenden. Anders geht es nicht.


----------



## Lulumann6 (6. Jul 2008)

nat und firewall ist doch mehr oder weniger das selbe  ???:L


----------



## Wildcard (6. Jul 2008)

Eine Firewall definiert Verbindungsregeln, NAT 'übersetzt' zwischen den Adressen zweier Netze.


----------



## tuxedo (7. Jul 2008)

Wildcard hat gesagt.:
			
		

> Was hat das mit Firewall zu tun? NAT war das richtige Stichwort. Portforwarding einrichten, oder einen der üblichen Tricks wie UDP hole punching verwenden. Anders geht es nicht.



Vorschlag: UPnP, und falls der Router das nicht unterstützt als Fallback doch "manuelles" Portforwarding oder eben UDP hole punching. 

- Alex


----------



## spyboot (14. Jul 2008)

Leute soll dass jetzt heissen ich soll ÜBER den router also erst die ip des roters den eigentlichen computer adressieren?
und wenn ja wie?


----------



## tuxedo (14. Jul 2008)

Hä?

Wenn der Server HINTER einem Router IRGENDWO im Internet steht, dann bringt dir am Client die IP des Server GAR NIX, weil du nur maximal bis zum Router kommst.

D.h. dein Client kann sich so oder so nur bis zum Router durchhangeln. 

Entweder du richtest am Router, der zwischen Server un Internet hängt ein POrtforwarding ein (manuell), oder du beschäftigst dich mit UPnP (falls der Router das kann), ODER du googlelst mal nach "UDP Hole Punching".

Fakt ist: Ohne "zutun" oder "sonderbehandlung" weiß der Router nicht, wohin er die eingehenden Client-Pakete schicken soll. Theoretisch könnten ja 1000 Server hinter dem Router hängen. Und "riechen" kann der Router nicht zu welchem Server die Pakete jetzt müssen.


- Alex


----------



## spyboot (14. Jul 2008)

Gibt es keine Möglihkeit vom Client aus dem Server mitzuteilen an wem im Netztwerk er die nachricht schicken soll?
so nach dem Motto Router>Pc>Port


----------



## tuxedo (14. Jul 2008)

?? Entweder steh ich jetzt auf dem Schlauch oder du hast was grundlegend nicht verstanden...

Machen wir mal ein Szenario:

Wir haben einen Server "S". Dieser Server läuft bei einem T-Online Kunden hinter einem Router.

Dann haben wir einen Client "C" der sich zum Server verbinden will.

Jetzt gibt es unterschiedliche Möglichkeiten wie C zu S kommt:

1) S-Betreiber teilt dem C mit (außerhalb des Programms, z.-B. per Email oder Telefon), welche IP mit welchem Port er zu benutzen hat
2) S-Betreiber teilt dem C mit, dass er Hostname "meintollerserver.dyndns.com", den er bei DynDns.com registriert hat, benutzen soll (wieder per Email, Telefon oder sonstwie).

So, in beiden Fällen hat der S-Betreiber die Adresse seines Routers mitgeteilt. Denn nur dieser hat eine IP aus dem öffentlichen Internet-Adressbereich (nämlich die, die er bei der verbindung mit T-Online erhalten hat).

Der S "lauscht" aber im lokalen Netzwerk hinter dem Router auf eingehende Verbindungen. Da C aber nur bis zum Router von S kommt, muss der Router bescheid wissen "Alles was bei mir an POrt XYZ ankommt ist für S bestimmt". Und mit diesem Wissen muss er die Pakete ins das lokale Netzwerk hinter dem Router weiterleiten. Pakete vom S zum C nehmen dann den gleichen Weg zurück.

So. Und eben dieses Wissen, das du dem Router beibringen musst, ist das sogenannte Port-Forwarding. Das macht man entweder "manuell" im Webinterface des Routers, ODER falls der Router die "UPnP" Technik beherrscht, dann kann S, sofern S auch UPnP beherrscht, dem Server selbst mitteilen, welchen Port er denn gerne für sich weitergeleitet hätte.

Das sind die gebräuchlichsten 2, würd ich mal sagen.

Es gibt natürluch noch weitere, darunter sei UDP Hole Punching zum x-ten mal genannt. Aber da wirfst du am besten mal google an und klärst noch besser vorher den aktuellen Stand der Dinge.

Und nur für den Fall dass du jetzt mit deiner Formulierung ausdrücken wolltest "Wie kommt eine Nachricht von C1 über S nach C2?": Das hat mit dem Verbindungsaufbau nix mehr zu tun.
Da musst du dir ein "Protokoll" überlegen, am Server die Pakete von C1 entgegen nehmen, reinschauen für welchen Client die Nachricht bestimmt ist, und dann diese vom S an C2 schicken lassen.

- Alex


----------



## Guest (16. Jul 2008)

Danke für deine ausfühliche Erklärung  :applaus:  ich wühl mich dann ma "manuell" durch die menüs meines routers um nach dem oben genanten Port-Forwarding zu suchen.



			
				alex0801 hat gesagt.:
			
		

> Und nur für den Fall dass du jetzt mit deiner Formulierung ausdrücken wolltest "Wie kommt eine Nachricht von C1 über S nach C2?": Das hat mit dem Verbindungsaufbau nix mehr zu tun.
> Da musst du dir ein "Protokoll" überlegen, am Server die Pakete von C1 entgegen nehmen, reinschauen für welchen Client die Nachricht bestimmt ist, und dann diese vom S an C2 schicken lassen.
> 
> - Alex



Dass is ja bereits geregelt jedenfalls hatt der Chat innerhalb des Netztwerkes bereits geklappt.

Wenn ich die Lösung finde stelle ich sie für alle die das selbe (Anfänger-)Problem haben hier rein.


----------



## spyboot (16. Jul 2008)

Sorry dass ich als Gast geschrieben habe^^ is mir garnicht aufgefallen.


----------



## spyboot (23. Sep 2008)

es war das port forwarding...


----------

