Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 01.09.2019
Сообщений: 7

Клиент-серверное приложение работает только на localhost

19.10.2019, 22:09. Показов 5436. Ответов 12

Студворк — интернет-сервис помощи студентам
У меня есть клиент серверное приложение, но оно работает только по собственному IP (127.0.0.1), а на других компьютерах не соединяется с сервером. Как это исправить, подскажите
Вот клиент
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void Main(string[] args)
        {
            try
            {
                TcpClient client = new TcpClient();
                Console.WriteLine("Введите Ip сервера");
                string ip = Console.ReadLine();
 
                client.Connect(ip, 12000); //подключаемся к серверу
                NetworkStream stream = client.GetStream(); //получаем сетевой поток для чтения и записи
                StringBuilder response = new StringBuilder();
 
                while (true)
                {
                    string message = Console.ReadLine();
                    byte[] buffer = Encoding.ASCII.GetBytes(message); //кодируеем собщение по ascii и переводим в байты
                    stream.Write(buffer, 0, buffer.Length); //отправляем сообщение
 
                    byte[] IncomingMessage = new byte[64];
                    do
                    {
                        int bytes = stream.Read(IncomingMessage, 0, IncomingMessage.Length);
                        response.Append(Encoding.ASCII.GetString(IncomingMessage, 0, bytes));
                    }
                    while (stream.DataAvailable); // пока данные есть в потоке
                                       
                    string msgWrite = Encoding.ASCII.GetString(IncomingMessage);
                    Console.WriteLine(msgWrite);
 
                    //stream.Close();
                    //client.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Thread.Sleep(5000);
            }
        }
И вот сервер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 static void Main(string[] args)
        {
            TcpListener server = default(TcpListener);
            try
            {
                server = new TcpListener(12000);
                StringBuilder response = new StringBuilder();
                TcpClient client = default(TcpClient);
                server.Start();
                Console.WriteLine("Сервер стартанул");
 
                client = server.AcceptTcpClient(); //ждём входящего подключения
                Console.WriteLine("Новый клиент");
                NetworkStream stream = client.GetStream(); //получаем сетевой поток для чтения и записи
 
                while (true)
                {     
                    byte[] IncomingMessage = new byte[256];
                    do
                    {
                        int bytes = stream.Read(IncomingMessage, 0, IncomingMessage.Length); //ждём сообщения
                        response.Append(Encoding.ASCII.GetString(IncomingMessage, 0, bytes));
                    }
                    while (stream.DataAvailable); // пока данные есть в потоке
 
                    string msgWrite = Encoding.ASCII.GetString(IncomingMessage);
                    Console.WriteLine(msgWrite);
 
                    string msg = "server got it";
                    byte[] buffer = Encoding.ASCII.GetBytes(msg);
                    stream.Write(buffer, 0, buffer.Length);
 
                    // закрываем поток и подключение
                    //stream.Close(); 
                    //client.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Thread.Sleep(5000);
            }
            finally
            {
                if (server != null)
                    server.Stop();
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2019, 22:09
Ответы с готовыми решениями:

Сделать клиент серверное приложение (только локальная сеть).
Здравствуйте, помогите советом куда копать, что почитать, как проще всего реализовать по следующему вопросу: Есть приложение: редактор...

Клиент-серверное приложение не работает через интернет
Тема такая есть сервер(TCPListener) и клиент(TCPClient) приложения в локальной сети работаю без проблем а через интернет нет почемуто=(ну я...

Прослушивание трафика только от одного IP. Сниффинг. Cniffing. Не Клиент- Серверное приложение!
Всё просто, но и сложно Код задания для прослушивания трафика static Socket socket; static byte buffer; ...

12
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
20.10.2019, 12:16
Лучший ответ Сообщение было отмечено keep_d0wn как решение

Решение

1. У TcpListener первый параметр должен быть внешний ip.
2. Открыть порт 12000 в брандмауэре: https://docs.microsoft.com/ru-... rver-ver15
3. Если используется роутер, выдать статический ip серверу и пробросить порт, например: http://www.dlink.ru/ru/faq/246/1156.html
4. Если используется антивирус, добавить приложение в белый список.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.10.2019, 18:01
Цитата Сообщение от keep_d0wn Посмотреть сообщение
кодируеем собщение по ascii и переводим в байты
Главное, не пишите ничего в консоль по-русски, а то придется новую тему создавать
0
0 / 0 / 0
Регистрация: 01.09.2019
Сообщений: 7
20.10.2019, 18:19  [ТС]
Цитата Сообщение от I2um1 Посмотреть сообщение
1. У TcpListener первый параметр должен быть внешний ip.
2. Открыть порт 12000 в брандмауэре: https://docs.microsoft.com/ru-... rver-ver15
3. Если используется роутер, выдать статический ip серверу и пробросить порт, например: http://www.dlink.ru/ru/faq/246/1156.html
4. Если используется антивирус, добавить приложение в белый список.
Я так понимаю это работает для внутренней сети, а как сделать что бы мой друг из своего дома мог подключиться к серверу?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
21.10.2019, 09:56
Лучший ответ Сообщение было отмечено keep_d0wn как решение

Решение

Цитата Сообщение от keep_d0wn Посмотреть сообщение
Я так понимаю это работает для внутренней сети
Да.

Цитата Сообщение от keep_d0wn Посмотреть сообщение
а как сделать что бы мой друг из своего дома мог подключиться к серверу?
Просто все 4 пункта сделать и все, больше ничего не надо.

Есть еще альтернативный вариант: создать виртуальную приватную сеть (VPN) через, например, Hamachi и указать ip адрес у TcpListener, который Hamachi сгенерирует. Через него, вроде, до сих пор играют в Heroes of Might and Magic 3.
1
0 / 0 / 0
Регистрация: 01.09.2019
Сообщений: 7
22.10.2019, 17:20  [ТС]
Я вот арендовал windows server с внешним ip, закинул на него серверное приложение и всё равно не могу подключиться к нему(к приложению). Хотя когда проверяю через netstat -a в cmd консоли, то он пишет что на сервере 12000 порт слушает. В чём может быть проблема? К серверу удалённо подключаюсь и работаю с ним, а вот мой код(выше) не работает
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
22.10.2019, 18:42
Лучший ответ Сообщение было отмечено keep_d0wn как решение

Решение

Цитата Сообщение от keep_d0wn Посмотреть сообщение
Я вот арендовал windows server с внешним ip
Если TcpListener создается с внешним IP и в фаерволе разрешены входящие TCP подключения на 12000 порт, то проблему надо искать на Azure Portal: https://docs.microsoft.com/en-... art-portal

На Azure Portal есть свои настройки на входящие подключения, а еще можно неаккуратно создать сервер без внешнего IP.
1
0 / 0 / 0
Регистрация: 01.09.2019
Сообщений: 7
22.10.2019, 19:01  [ТС]
Спасибо большое, всё заработало! Проблема была в натах моего провайдера
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
28.10.2019, 01:36
Цитата Сообщение от keep_d0wn Посмотреть сообщение
Проблема была в натах моего провайдера
А как же
Цитата Сообщение от keep_d0wn Посмотреть сообщение
Я вот арендовал windows server с внешним ip
?

NAT на стороне провайдера = нет выделенного внешнего ip.
0
0 / 0 / 0
Регистрация: 01.09.2019
Сообщений: 7
30.10.2019, 10:02  [ТС]
Цитата Сообщение от nicolas2008 Посмотреть сообщение
NAT на стороне провайдера = нет выделенного внешнего ip.
нат был на стороне клиента, а не сервера
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
30.10.2019, 19:34
keep_d0wn, нат на стороне клиента вообще никак не влияет на связь. Все компьютеры подключенные через роутер находятся за натом, но это им не мешает подключаться к удаленным серверам
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
30.10.2019, 20:10
Рядовой, тут обратное. надо подключаться к серверу который за нат-ом.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
31.10.2019, 21:28
Цитата Сообщение от nicolas2008 Посмотреть сообщение
надо подключаться к серверу который за нат-ом
Лучше использовать что-нибудь готовое типа Open.NAT, или посмотреть как оно реализовано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2019, 21:28
Помогаю со студенческими работами здесь

Не работает клиент-серверное приложение
Всем доброго. Вот после несколько дневного поиска нашел готовый клиент сервер на Форме. Работает, хотя и с ошибками. Вопрос в чем. Если...

Проверьте код. Почему то не работает (клиент-серверное приложение)
Что то не хочет работать... передаю картинку...делается скрин экрана в режиме постоянного времени. При запуске сервера, он зависает на...

Клиент-серверное приложение (работа только на одной машине)
Здравствуйте. Возник такой вопрос по написанию простого приложения (Android). Приложение реализует конект. к серверу и при нажатии на...

Клиент серверное приложение не работает
клиент void __fastcall TForm1::ClientSocket1Connect(TObject *Sender, TCustomWinSocket *Socket) { ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru