Невозможно подключиться с удаленного компьютера - PullRequest
8 голосов
/ 02 декабря 2009

У меня какая-то проблема, и я не могу проверить это дома, если она работает или нет. Вот код

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Net.Security;

class Program
{
    private static IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
    private static int port = 6000;
    private static string data = null;

    static void Main(string[] args)
    {
        Thread thread = new Thread(new ThreadStart(receiveThread));
        thread.Start();
        Console.ReadKey();
    }

    public static void receiveThread()
    {
        while (true)
        {
            TcpListener tcpListener = new TcpListener(ipAddress, port);
            tcpListener.Start();

            Console.WriteLine("Waiting for connection...");

            TcpClient tcpClient = tcpListener.AcceptTcpClient();

            Console.WriteLine("Connected with {0}", tcpClient.Client.RemoteEndPoint);

            while (!(tcpClient.Client.Poll(20, SelectMode.SelectRead)))
            {
                NetworkStream networkStream = tcpClient.GetStream();
                StreamReader streamReader = new StreamReader(networkStream);

                data = streamReader.ReadLine();

                if(data != null)
                    Console.WriteLine("Received message: {0}", data);
            }
            Console.WriteLine("Dissconnected...\n");
            tcpListener.Stop();
        }
    }
}

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

Я даже выключил брандмауэр на моем ПК и роутере, как я делал на ноутбуке моего друга. Каждый раз, когда я пытался подключиться, его компьютер отказывался от подключения. Может я что-то не так делаю?

Конечно, ipAddress теперь является локальным адресом, поскольку в данный момент он работает только с этим. Любые предложения, что делать?

Ответы [ 4 ]

13 голосов
/ 02 декабря 2009

Вам нужно настроить его на прием подключений с любого IP, для этого есть функция перегрузки IPAddress:

System.Net.IPAddress.Any

используйте его вместо 127.0.0.1, и это решит вашу проблему.

4 голосов
/ 02 декабря 2009

Вы слушаете 127.0.0.1, который является адресом обратной связи, который является специальным адресом, означающим «этот компьютер» Это означает, что вы будете принимать только те подключения, которые установлены на том же компьютере, на котором работает сервер.

Вам необходимо прослушать один (или несколько) реальных IP-адресов сервера.

3 голосов
/ 02 декабря 2009

Ваша проблема в том, что установка IP-адреса в явном виде при инициализации TcpListener позволит ему принимать подключения только от этого адреса . Поэтому при вводе локального адреса 127.0.0.1 будут приниматься только подключения, исходящие с вашего компьютера.

Реализация, которую вы хотите использовать, выглядит следующим образом:

TcpListener tcpListener = new TcpListener(IPAddress.Any, port);

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

1 голос
/ 02 декабря 2009

Я думаю, что ваш компьютер (сервер) отказывается подключаться, потому что 127.0.0.1 является локальным (-только).

Попробуйте эту простую перегрузку:

  TcpListener tcpListener = new TcpListener(port);
...