Задать вопрос
@S0HardCore

Передача данных с закрытыми портами?

Имеется роутер D-Link DIR-300NRU rev.B7.
Порты не открываются: UPnP включил, виртуальные сервера добавил.
vRmxmpn.pngvKeNvfc.png
Сохранил, ребутнул, нет изменений. Так же, на всякий добавил в исключения брандмауэра.
IQU7eUQ.png
Нашел инфу, что торрент открывает определённый порт, пока запущен. Попробовал передать сообщение через открытый порт - 55585.
Сервер:
TcpListener server = null;
        try
        {
            Int32 port = 55585;
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");
            server = new TcpListener(localAddr, port);
            server.Start();
            Byte[] bytes = new Byte[256];
            String data = null;
            while (true)
            {
                Console.Write("Waiting for a connection... ");
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connected!");
                data = null;
                NetworkStream stream = client.GetStream();
                int i;
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("Received: {0}", data);
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
                    stream.Write(msg, 0, msg.Length);
                    Console.WriteLine("Sent: {0}", data);
                }
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }
        finally
        {
            server.Stop();
        }
        Console.WriteLine("\nHit enter to continue...");
        Console.Read();

Клиент:
static void Main(string[] args)
        {
            try
            {
                string tmp1 = Console.ReadLine();
                string tmp = Console.ReadLine();
                Connect(tmp1, tmp);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }

        static void Connect(String server, String message)
        {
            try
            {
                Int32 port = 55585;
                TcpClient client = new TcpClient(server, port);
                Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
                NetworkStream stream = client.GetStream();
                stream.Write(data, 0, data.Length);
                Console.WriteLine("Sent: {0}", message);
                data = new Byte[256];
                String responseData = String.Empty;
                Int32 bytes = stream.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                Console.WriteLine("Received: {0}", responseData);
                stream.Close();
                client.Close();
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine("ArgumentNullException: {0}", e);
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }

            Console.WriteLine("\n Press Enter to continue...");
            Console.Read();
        }

Естественно, пробовал через UDP и разные исходники в сети, один и тот же результат:
Через локалхост работает независимо от порта, что было ожидаемо.
qnTHS9p.png
Если вводить действительный адрес, то получаю отказ.
F2MpMv1.png
Есть какие-то действенные варианты открытия порта или передачи данных без использования последнего?
  • Вопрос задан
  • 418 просмотров
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@Beltoev
Живу в своё удовольствие
Я что-то упустил или вы открыли на роутере 27015 для внешних подключений, но при этом извне пытаетесь подключиться к порту 55585?

Ну, и судя по скриншоту, вы неправильно порты пробрасываете: если вам нужен доступ к порту 55585 компьютера извне, в роутере в поле "Внутренний порт" его и добавьте. А подключаться пробуйте к внешнему порту (у вас это 27015).

192.168.0.100 - это точно IP компьютера во внутренней сети?
Ответ написан
@ar4ebaldello
Для этих целей существует специальный сервис - ngrok
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы