2016-07-08 5 views
-1

Я хочу создать приложение для общения на C#, где вы можете ввести строку в консоль клиента и получить ее в консоли сервера.C# Консоль-приложение в паре через интернет

Что я имею в виду: Пользователь B выполняет клиентскую программу на своем компьютере, которая находится где-то в другом месте, чем у пользователя A. Клиентская программа подключается через TCP к серверной программе, на которой пользователь A открыт на своем компьютере. Когда Пользователь B вводит строку в Программе и нажимает enter, Пользователь A должен получать строку через Интернет.

У меня есть что-то вроде этого:

Сервер:

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(); 
} 

Клиент:

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(); 
} 

Когда я исполняю клиента на ПК и сервера на моем ноутбуке , он отлично работает, но как он работает с внешними компьютерами?

Когда я заменил
IPAddress IP = IPAddress.Parse("192.168.2.140"); с WAN IP, который я получаю от canihazip.com, он не хочет, чтобы соединиться.

EDIT:

Порт-экспедиционная активируется я думаю, Port Forwarding

Проблема заключается в том: Он работает в локальной сети в моем доме, как я хочу, он соединяет, я могу написать текст, который отображается в серверном приложении. Но когда я попрошу некоторых из моих друзей попробовать это, они не могут подключиться к моему серверу.

+2

это звучит как сетевая проблема - убедитесь, что ваш isp не заблокировал вас и что ваш маршрутизатор имеет соответствующие порты. –

+1

Не вопрос программирования, это действительно вопрос ИТ. – BradleyDotNET

+0

@ DanielA.White See Редактировать мой пост, он поддерживает отправку почтой. Как я уже упоминал, в моей локальной сети он работает нормально, но за его пределами, когда я прошу некоторых из моих знакомых попробовать его, клиент не может подключиться из своей сети к моему серверному приложению. – Flauschcoder

ответ

0

Вам нужно перейти к интерфейсу администратора вашего маршрутизатора и переадресовать соединения на определенные порты из Интернета на IP-адрес системы за сетью. Это будет полностью зависеть от вашего маршрутизатора, и быстрый поиск в Google скажет вам, что вам нужно знать.

Обновления от OP редактирования:

Так оттуда, вы получите доступ к нему через публичный IP с государственным портом, а также настроить систему для прослушивания порта LAN. Еще одна эффективная задача - использовать бесплатную динамическую службу dns, такую ​​как duckdns.com, которой я раньше пользовался, и нашел ее достаточно хорошим и достаточно простым, чтобы получить фактическое имя, которое всегда будет отображаться на ваш общедоступный IP-адрес, который - если вы не покупаете статический IP-адрес у своего интернет-провайдера, он динамичен и будет меняться в будущем.

+0

Посмотрите на мое редактирование сообщения, я активировал его , если его право – Flauschcoder

+0

@Flauschcoder, см. мое обновление. –

Смежные вопросы