TcpListener
-
Hallo noch mal,
einen Server mieten werde ich mir wohl nicht weil ich ja nur testen möchte. Mit der IP hab ich das so gelöst oder besser gesagt werde ich das so lösen, dass der Server sich mit meiner Webseite verbindet und so seine IP Adresse bereitstellt (mit Datenbank, PHP und so), ein Client verbindet sich auch mit der Webseite und kriegt auch so die IP des Servers.
Bevor ich das aber anfagen so richtig zu programmieren habe ich einen Client erstellt. Dieser Client verbindet sich mit der öffentlichen IP des Serverrechners und sendet. Der Server lauscht die locale IP und soll nur empfangen. Das ganze klappt aber nicht. Der Rechner dass das Client Programm hat sendet über Internet und ist ein Windows 7 mit 64 Bit. Das der Rechner mit 64 Bit läuft müsste doch egal sein weil ich ja das mit .NET mache oder?
Der Server:
int main(){ Console::WriteLine("Server srart"); String^ text = nullptr; IPAddress^ localAddr = IPAddress::Parse("192.168.178.24"); Int32 port = 80; IPEndPoint^ ipEP = gcnew IPEndPoint(localAddr, port); TcpListener^ tcpListener = gcnew TcpListener(localAddr, port); tcpListener->Start(); while(true){ TcpClient^ tcpClient = tcpListener->AcceptTcpClient(); NetworkStream^ stream = tcpClient->GetStream(); array <Byte> ^longBytes = gcnew array <Byte> (28); stream->Read(longBytes, 0, longBytes->Length); Encoding^ utf32 = Encoding::UTF32; text = utf32->GetString(longBytes); Console::WriteLine(">> {0}", text); for(Int32 i=0; i< longBytes->Length; i++) Console::Write("{0} ", longBytes[i]); Console::WriteLine(); } return 0; }
Der Client:
Void sendText(String^ text){ IPAddress^ remotAddr = IPAddress::Parse("79.224.5.160"); Int32 port = 80; TcpClient^ client = gcnew TcpClient(); client->Connect(remotAddr, port); NetworkStream^ stream = client->GetStream(); Encoding^ utf32 = Encoding::UTF32; array <Byte> ^send = utf32->GetBytes(text); stream->Write(send, 0, send->Length); stream->Close(); client->Close(); } int main(){ String^ text = nullptr; Console::WriteLine("Client start"); while(true){ text = Console::ReadLine(); sendText(text); } return 0; }
Im lokalen Netzwerk funktioniert das. Wenn das Client Programm aber übers Internet sendet dann kommt ein Fehler.
Und nochwas. Es gibt ja auch so ein Tool Hamatchi, da kann man ja auch von einem Rechner zum anderen senden.
-
hast Du NAT auf Deinem Router aktiviert?
die Webseite ist überflüssig wenn Du Dich mal mit DNS bzw. DynDNS auseinander setzt ... außerdem ist die DNS Variante einfacher - da Dein Router die Arbeit erledigt
http://de.wikipedia.org/wiki/Hamachi#Funktion - nur die erste Zeile ist wichtig
-
Ob ich NAT akriviert habe weiß ich nicht, weil ich diese Einstellung nicht finden kann. Hab FRITZ!Box Fon WLAN 7141 (UI) und das sind meine Einstellungen http://r0m3o.r0.funpic.de/Aufzeichnen.jpg.
Und bei DynDNS ist es ja so das ich von einem Rechner (Router) die IP "speichere" (bei DynDNS) und das will ich nicht. Das Programm soll ungefähr wie Hamatchi funktionieren. Das fertige Programm soll als Server und als Client arbeiten.
Programm Funktionsweise:
Programm start ... "dann wird eine Liste der IP's angezeigt (von der Webseite) mit denen man sich verbinden kann (als Client)" ... oder man macht sein Programm als Server und die IP des Rechner wird in der Datebank der Webseite gespeichert so das andere die das Programm gestartet haben diese IP sehen und sich verbinden können.Und der Nutzer des Programm soll selber bei seinem Router nichts einstellen müssen.
-
ghostboss schrieb:
Ob ich NAT akriviert habe weiß ich nicht,
dann hast Du es also nicht aktiviert ... kann sein das sich das hinter dem Menüpunkt "Portweiterleitung" oder so versteckt
Und der Nutzer des Programm soll selber bei seinem Router nichts einstellen müssen.
sofern der Benutzer als Server fungieren soll, muss es entsprechend NAT aktivieren ... oder Du nutzt dafür einen eigenen Server