@matweykai
Человек, который хочет влезть в мир IT. Изучаю C#

Как правильно написать TCP клиент-серверное приложение, чтобы оно могло работать не только в локальной сети?

Я написал простейшее клиент-серверное приложение на основе классов TcpListener и TcpClient. В локальной сети всё работает нормально, но когда я включаю сервер на своём компьютере, а друг запускает клиент на своём компьютере, то выдаёт такую ошибку: "Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера"
PS: У меня статический ip, порты я открыл и на своём компьютере и на компьютере с клиентом.
//Код сервера
 static void Main(string[] args)  
        {
            Console.Write("Введите порт для прослушивания сервером: ");
            string enteredPort = Console.ReadLine();

            TcpListener tcpListener = null;
            try
            {
                int port = Convert.ToInt32(enteredPort);
                tcpListener = new TcpListener(IPAddress.Any ,port);
                tcpListener.Start();
            }
            catch (FormatException) 
            {
                Console.WriteLine("Неправильно введён ip или порт");
            }
            catch (SocketException)
            {
                Console.WriteLine("Ошибка подключения(((");
            }
            TcpClient tcpClient = tcpListener.AcceptTcpClient();

            while (true)
            {
                if (tcpClient.Connected)
                {
                    Console.WriteLine("Успех!!!");
                }
            }
        }

//Код клиента
static void Main(string[] args)
        {
            Console.Write("Введите ip сервера: ");
            string serverIp = Console.ReadLine();
            Console.Write("Введите порт сервера: ");
            string serverPort = Console.ReadLine();

           
            var tcpClient = new TcpClient();

            try
            {
                IPAddress iPAddress = IPAddress.Parse(serverIp);
                int port = Convert.ToInt32(serverPort);
                
                tcpClient.Connect(new IPEndPoint(iPAddress, port));
            }
            catch (FormatException)
            {
                Console.WriteLine("Неправильно введён ip или порт");
            }
            catch (SocketException ex)
            {
                Console.WriteLine("Ошибка подключения(((" + ex.Message);
            }
            while (true)
            {
                if (tcpClient.Connected)
                {
                    Console.WriteLine("Успех!!!");
                }
                string ki = Console.ReadLine();
                if (ki == string.Empty)
                    break;
            }
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
"У меня статический ip, порты я открыл и на своём компьютере и на компьютере с клиентом."
статический ip у вас явно на роутере, скорее всего требуется с него проброс порта на ваш компьютер сделать.
На компьютере с клиентом порт открывать необходимости нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks Куратор тега C#
Пустите пинг и трассировку от друга до вас, чтобы узнать проблемный узел.

Как вам написал, скорее всего, вы просто неправильно настроили сеть.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
15 авг. 2020, в 04:49
5000 руб./за проект
15 авг. 2020, в 04:41
2000 руб./за проект
15 авг. 2020, в 04:36
5000 руб./за проект