От связи активно отказались - PullRequest
0 голосов
/ 10 июня 2018

Я пишу сетевое приложение C # Sockets. Он отлично работал, когда я тестировал, подключившись к серверу на «127.0.0.1» , но когда я пришел к точке, где я решил, что хочу тестировать с других машин, и переключил адрес соединенияк моему фактическому IP-адресу я начал получать

Невозможно установить соединение, так как целевая машина активно отказывала в этом - мой IP-адрес: порт-

исключение.

Я искал решения в других постах, но нашел одно: отключить брандмауэр , но это не решило проблему.

Порты совпадают вклиент и сервер, так что это не проблема.

В другом посте предлагается запустить netstat -anb и посмотреть, прослушивает ли сервер указанный порт, и, к моему удивлению, приложение даже не показывается средирезультаты.

Вот код для установления соединения:

Метод соединения из моего класса, который имеет дело с соединением на стороне клиента:

public bool Connect()
            {
            if (!connected)
                {
                try
                    {
                    sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    sock.Connect(new IPEndPoint(IPAddress.Parse(address), port));
                    connected = true;
                    return true;
                    }
                catch(Exception e)
                    {
                    Console.WriteLine(e.Message);
                    connected = false;
                    return false;
                    }
                }
            return false;
            }

На стороне сервера. Я использую этот простой приемник:

public class Listener
        {
        Socket sock;
        bool listening = false;
        int port;

        public delegate void socketAcceptedHandler(Socket s);
        public event socketAcceptedHandler socketAccepted;

        public Listener(int port)
            {
            this.port = port;
            }

        public void start()
            {
            if (listening)
                {
                return;
                }

            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            sock.Bind(new IPEndPoint(0, port));
            sock.Listen(0);
            sock.BeginAccept(callback, null);

            listening = true;
            }

        public void stop()
            {
            if (!listening)
                {
                return;
                }

            if (sock != null)
                {
                sock.Close();
                sock.Dispose();
                }

            listening = false;
            }

        public void callback(IAsyncResult result)
            {
            try
                {
                Socket s = sock.EndAccept(result);

                if (socketAccepted != null)
                    {
                    socketAccepted(s);
                    }

                sock.BeginAccept(callback, null);
                }
            catch (Exception e)
                {
                Console.WriteLine("Something went wrong:\n{0}", e.Message);
                }
            }
        }

ОБНОВЛЕНИЕ: Я проверил, установлено ли соединение, если я использую свой локальный IP-адрес, так оно и есть.Должно быть, роутер.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

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

0 голосов
/ 10 июня 2018

Брандмауэр может блокировать порт, другая программа может прослушивать порт или порт ограничен.Вы можете запустить «netstat -aon» в командной строке, чтобы увидеть, какой процесс прослушивает порт, к которому вы хотите получить доступ.

...