SocketException при попытке подключения к серверу «Попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через определенный промежуток времени» - PullRequest
1 голос
/ 28 мая 2019

У меня есть сервер, который просто программа, которая прослушивает порт моего компьютера.У меня есть клиентская программа, которая подключается к этому порту, отправляет запросы и получает ответы.Для этого я использую класс System.Net.Socket с протоколом tcp.

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

Вот мой код:

Клиент:

private void Connect_Click(object sender, EventArgs e)
        {
            try
            {
                sock.Connect(new IPEndPoint(IPAddress.Parse(ip.Text), 1234));
                new Thread(() =>
                {
                    read();
                }).Start();
            }
            catch (Exception ex)
            {
                //Manage exception
            }
        }

private void read()
        {
            while (true)
            {
                try
                {

                    byte[] buffer = new byte[255];
                    int rec = sock.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                    if (rec <= 0)
                        throw new SocketException();

                    Array.Resize(ref buffer, rec);

                    //Displaying received data
                    Invoke((MethodInvoker)delegate
                    {
                        requests.Items.Add(Encoding.Default.GetString(buffer));
                    });
                }
                catch
                {
                    MessageBox.Show("DISCONNECTED");
                    sock.Close();
                    break;
                }
            }

            Application.Exit();
        }

Сервер:

private void Listen()
        {
            server.Listen(0);

            new Thread(AcceptOneConnection).Start();
        }

private void AcceptOneConnection()
        {
            if (client != null)
                client.Close();

            client = server.Accept();

            MessageBox.Show("Client accepted");

            while (true)
            {
                string received = ReceiveData();

                if (received == "stop connection")
                    break;

                string[] request = received.Split(' ');

                switch (request[0])
                {
                    case "register":
                        Register(request);
                        break;
                    case "login":
                        Login(request);
                        break;
                    case "disconnect":
                        UsersManager.Disconnect();
                        SendData("Disconnected");
                        break;
                    default:
                        SendData("Unknown request");
                        break;
                }
            }

            client.Close();
        }

private string ReceiveData()
        {
            try
            {
                byte[] buffer = new byte[255];
                int rec = client.Receive(buffer, 0, buffer.Length, 0);

                if (rec <= 0)
                    throw new SocketException();

                Array.Resize(ref buffer, rec);

                return Encoding.ASCII.GetString(buffer);
            }
            catch
            {
                return "";
            }
        }

Что я должен изменить, чтобы кто-то, у кого есть клиент, мог подключиться к серверу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...