2016-07-08 19 views
-1

Ich möchte eine C# -Chat-ähnliche App erstellen, in der Sie eine Zeichenfolge in die Client-Konsole eingeben und in der Serverkonsole empfangen können.C# Console-Anwendung über das Internet gepaart

Was ich meine: Benutzer B führt das Clientprogramm auf seinem Computer aus, der sich irgendwo anders als bei Benutzer A befindet. Das Clientprogramm verbindet über TCP mit dem Serverprogramm, das Benutzer A auf seinem Computer geöffnet hat. Wenn Benutzer B im Programm eine Zeichenfolge eingibt und die Eingabetaste drückt, sollte Benutzer A die Zeichenfolge über das Internet empfangen.

Ich habe so etwas wie das:

Server:

static void Main(string[] args) 
{ 

    Console.WriteLine("Start Server ..."); 


    IPAddress b = IPAddress.Any; 
    TcpListener Server = new TcpListener(b, 5550); 
    Server.Start(); 
    Console.WriteLine("Server started."); 

    Console.WriteLine("Wait for Connection..."); 
    TcpClient Client = Server.AcceptTcpClient(); 
    Console.WriteLine("Succeeded"); 

    Stream MessageStream = Client.GetStream(); 

    while (true) 
    { 
     byte[] message = new byte[4096]; 
     int bytesRead; 
     try 
     { 
      bytesRead = MessageStream.Read(message, 0, 4096); 

      ASCIIEncoding encoder = new ASCIIEncoding(); 
      Console.WriteLine(encoder.GetString(message, 0, bytesRead)); 
     } 

     catch (IOException) 
     { 
      break; 
     } 
    } 

    Client.Close(); 
    Server.Stop(); 
} 

Auftraggeber:

static void Main(string[] args) 
{ 
    IPAddress IP = IPAddress.Parse("192.168.2.140"); 
    TcpClient Client = new TcpClient(); 
    Client.Connect(IP, 5550); 

    Stream MessageStream = Client.GetStream(); 
    Console.WriteLine("Success"); 

    ASCIIEncoding encoder = new ASCIIEncoding(); 

    Console.WriteLine("Enter Text here"); 

    var input = Console.ReadLine(); 
    if(input != null) 
    { 
     byte[] buffer = encoder.GetBytes(input); 

     MessageStream.Write(buffer, 0, buffer.Length); 
     MessageStream.Flush(); 
    } 

    Console.ReadLine(); 
} 

Wenn ich führen Sie den Client auf meinem PC und dem Server auf meinem Laptop funktioniert es gut, aber wie funktioniert es mit außerhalb meines lokalen Netzwerk-Computers?

Als ich
ersetzt IPAddress IP = IPAddress.Parse("192.168.2.140"); mit dem WAN-IP, die ich von canihazip.com bekommen, will es nicht verbinden.

EDIT:

Port-Forwarding i Port Forwarding

erraten aktiviert

Das Problem ist: Es ist im lokalen Netzwerk bei mir zu Hause arbeitet, wie ich will, es verbindet, ich einen Text schreiben kann, die erscheint in der Server-Anwendung. Aber wenn ich einige meiner Freunde frage, dieses zu versuchen, können sie Verbindung zu meinem Server nicht herstellen.

+2

Das klingt nach einem Netzwerkproblem - stellen Sie sicher, dass Ihr isp Sie nicht blockiert hat und dass Ihr Router diese Ports entsprechend weitergeleitet hat. –

+1

Keine Programmierfrage, das ist wirklich eine IT-Frage. – BradleyDotNET

+0

@ DanielA.White Siehe Bearbeiten meines Posts, es unterstützt Post-Forwarding. Wie ich erwähnt habe, funktioniert es in meinem lokalen Netzwerk, aber außerhalb davon, wenn ich einige meiner Freunde frage, es zu versuchen, kann der Client von ihrem Netzwerk zu meinem Server App – Flauschcoder

Antwort

0

Sie müssen zur admin-Schnittstelle Ihres Fräsers gehen und Verbindungen auf bestimmten Häfen vom Internet zur IP-Adresse des Systems weiterleiten hinter dem Netzwerk. Das hängt ganz von Ihrem Router ab und die schnelle Google-Suche wird Ihnen sagen, was Sie wissen müssen.

Update von OP bearbeiten:

Also von dort aus gelangen Sie es über die öffentliche IP mit dem öffentlichen Hafen, und stellen Sie Ihr System auf dem LAN-Port zu hören. Eine andere effektive Sache, um zu helfen, wird sein, einen freien dynamischen DNS-Service zu benutzen, wie duckdns.com, den ich vorher benutzt habe und der gut und einfach genug ist, um einen tatsächlichen Namen zu erhalten, der immer deiner öffentlichen IP-Adresse zugeordnet wird - Wenn Sie keine statische IP-Adresse von Ihrem ISP erwerben - ist dynamisch und wird sich in Zukunft ändern.

+0

Blick auf meine Post bearbeiten, ich habe es aktiviert , wenn es richtig ist – Flauschcoder

+0

@Flauschcoder, siehe mein Update. –