С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
9 / 9 / 3
Регистрация: 11.12.2012
Сообщений: 152

Не получается заставить работать сокеты по интернету

26.06.2014, 22:29. Показов 3142. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться, никак не получается заставить работать сокеты по интернету.
Если по порядку, то не получается выполнить функцию Bind для сокета сервера, вылетает исключение с сообщением "Требуемый адрес для своего контекста неверен"
на данный момент пытаюсь делать так:
C#
1
2
3
4
5
6
7
8
9
10
11
            IPAddress ipAddr = IPAddress.Parse("xx.xxx.xxx.xx");
            IPEndPoint  ipEndPoint = new IPEndPoint(ipAddr, 3240);
            Socket MySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                MySocket.Bind(ipEndPoint);
            }
            catch(Exception err)
            {
 
            }
вместо иксов ip-адрес с http://2ip.ru/
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2014, 22:29
Ответы с готовыми решениями:

Не получается заставить CMake работать с boost
Сколько уже перечитал топиков - без толку. Не работает. Имеется: - Windows 10 - CLion 2018.1.6 - CMake 3.12 - Boost 1.67.0 -...

FastProg программатор, не получается заставить работать
Всем доброго времени суток. Когда-то давно прикупил себе Fastprog программатор аналог mkii. Шил им xmega и attiny2313. Все было хорошо....

Не получается заставить работать одновременно два jQuery решения
Установил галерею PhotoSwipe и есть меню с всплывающей картинкой при наведении на пункт - не хотят работать вместе по отдельности всё...

13
 Аватар для lpvoid
324 / 307 / 59
Регистрация: 06.03.2013
Сообщений: 869
27.06.2014, 08:08
TamaGOch, TcpListener, не?
1
16 / 16 / 4
Регистрация: 17.10.2012
Сообщений: 73
27.06.2014, 10:34
Попробуйте использовать InterNetworkV6,может быть поможет,хотя может ip-адресс криво парсится
1
9 / 9 / 5
Регистрация: 23.06.2014
Сообщений: 40
27.06.2014, 10:56
Дак конечно, вы определитесь, вы открываете сервер или клиент?

Добавлено через 1 минуту
Если делаете bind, то надо указывать свой локальный IP,
Забиндите на localHost, проверьте, потом забиндите на локальный IP машины
если делаете Connect, то удаленный
1
9 / 9 / 3
Регистрация: 11.12.2012
Сообщений: 152
27.06.2014, 13:21  [ТС]
CarlosCastaneda, спасибо, чувствую, дело пошло.
Запуская сокет-клиент и сокет-сервер на одном компьютере, указывая localhost у обоих, работает.
Теперь так, оставляю для сервера localhost:
C#
1
2
3
IPAddress ipAddr = Dns.GetHostEntry("localhost").AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 3240);
Socket MySocket = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
со стороны клиента не получается сделать connect по ip (по http://2ip.ru/)
Подскажите пожалуйста, как должен подключаться клиент? Указывать ip?

Добавлено через 6 минут
Хотя подождите, кажется я просто не понял что localhost это не локальный ip

Добавлено через 49 минут
Не получается

Добавлено через 17 минут
клиент:
C#
1
2
3
4
IPAddress ipAddr = Dns.GetHostEntry("109.184.169.80").AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 3240);
MySocket = new Socket(ipEndPoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
MySocket.Connect(ipEndPoint);
Добавлено через 18 минут
======================================== ======================================== =====
Заработало с локальным адресом, вот так:
C#
1
2
3
4
5
6
//Server
Socket MySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 3240);
MySocket.Bind(ipEndPoint);
MySocket.Listen(10);
Socket r = MySocket.Accept();
C#
1
2
3
4
//Client
MySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.101"), 3240);
MySocket.Connect(ipEndPoint);
Добавлено через 3 минуты
если вместо
C#
1
"0.0.0.0"
ставить 192.168.0.101, тоже работает, а вот как сделать черз интернет, пока не знаю
1
16 / 16 / 4
Регистрация: 17.10.2012
Сообщений: 73
27.06.2014, 13:24
Сокет на сервере

1) сокет создаётся
2) сокет.Binding()
3 сокет ждёт входящие подключения сокет.Listen() . есть перегрузки.
4) при получении входящего соединения создаешь ещё 1 сокет типа Socket s2= сокет.Accept();
Для приёма данных уже работаешь непосредственно с ним.

Клиент
1) создаешь сокет
2) вызываешь его метод Connect() с указанием точки и порта.
З ы и сокет сервера ,и сокет клиента должны быть настроены на 1 порт, то есть сервер слушает ,допустим порт 5850,а клиент конектится по 5850. Ip адрес ,само собой, одинаковый.
1
9 / 9 / 3
Регистрация: 11.12.2012
Сообщений: 152
27.06.2014, 13:35  [ТС]
sithy, здесь круг моих вопросов замыкается:
самой первой моей проблемой было то, что если я буду делать так с сервером:
C#
1
2
3
4
5
6
7
8
9
10
11
Socket MySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
        IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("109.184.169.80"), 3240);
        MySocket.Bind(ipEndPoint);
 }
catch(Exception err)
{
}
MySocket.Listen(10);
Socket r = MySocket.Accept();
то на процедуре Bind() вылетает исключение с сообщением: Требуемый адрес для своего контекста неверен
я думал, что проблема в параметрах конструктора сокета, но, меняя их, ни к чему не пришел
а ip беру с сайтов типа http://2ip.ru/
0
16 / 16 / 4
Регистрация: 17.10.2012
Сообщений: 73
27.06.2014, 13:38
TamaGOch, а вы в сервере делали бесконечный цикл допустим или что-то подобное?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
Socket MySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
 
        IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("109.184.169.80"), 3240);
        MySocket.Bind(ipEndPoint);
 
MySocket.Listen(10);
 
While(true)
{
Socket r = MySocket.Accept();
}
Тяжко с телефона писать
1
9 / 9 / 3
Регистрация: 11.12.2012
Сообщений: 152
27.06.2014, 13:41  [ТС]
sithy, нет, вот прямо как есть последний листинг, этот код и выполняется, точнее не выполняется.
А по идее должно бы?
====
Accept синхронный, он первый раз не выполнится до тех пор, пока не будет запроса на подключение от клиента
0
9 / 9 / 5
Регистрация: 23.06.2014
Сообщений: 40
27.06.2014, 13:45
TamaGOch,
cmd -> ipconfig
и вот тот адрес что в ip конфиг указан, тот и ставьте

Добавлено через 1 минуту
фишка в том, что 2ip.ru показывает внешний IP вашего провайдера, а не вашего компа.
Если бы у компа сразу был внешний IP, тогда бы это работало

Добавлено через 1 минуту
Например мой провайдер дает внешний IP, я хожу в инет через роутер,
роутер подключается к провайдеру, и при этом внешний IP дается роутеру, а не компу
поэтому 2ip покажет внешний ip роутера, а у компа этого внешнего IP нет
1
9 / 9 / 3
Регистрация: 11.12.2012
Сообщений: 152
27.06.2014, 13:47  [ТС]
CarlosCastaneda, вот как раз чуть выше дописал, что заработало с ним, как раз 192.168.0.101 взял из командной строки,
а как тогда клиент достучится до компа, если он может, к примеру, знать только внешний ip, как с этих сайтов?
0
9 / 9 / 5
Регистрация: 23.06.2014
Сообщений: 40
27.06.2014, 13:49
Лучший ответ Сообщение было отмечено TamaGOch как решение

Решение

поэтому и траблы, биндитесь на какой нибудь 192.168.0.100 и будет все ништяк

Добавлено через 1 минуту
я писал недавно в другой теме про NAT
1
9 / 9 / 3
Регистрация: 11.12.2012
Сообщений: 152
27.06.2014, 13:50  [ТС]
CarlosCastaneda, огромное спасибо вам и всем кто помогал, буду пробовать))
0
9 / 9 / 5
Регистрация: 23.06.2014
Сообщений: 40
27.06.2014, 13:50
клиент из интернета подключается на внешний IP, маршрутизатор провайдера (или ваш роутер), в соответсвии с определенной таблицей прокидывает коннект на ваш комп и все работает
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2014, 13:50
Помогаю со студенческими работами здесь

Как заставить сайт написанный на 5.3 заставить работать на 5.6? Как принудительно включить register_globals?
Есть древний сайт. Работает на php 5.3. Как объяснил разработчик данного сайта - все дело в register_globals, надо принудительно включить...

Сокеты, сервер и как это должно работать
Нашел хорошую статью работы с сокетами: http://www.quizful.net/post/java-socket-programming Вроде как бы разобрался, но проблема в...

Не получается подключиться к Интернету
Основная ОС - Win 7 x64, на виртуальной машине установлена win x32. Использую Virtualbox. Как я не пытался, но при подключении всегда...

Не получается подключится к интернету
Не могу подключиться к интернету на ноуте от кабеля. Пробовал подключится на другом ноуте - там всё получилось. Могу подключиться к wi-fi,...

Не получается отследить потерю связи по сети. Linux, сокеты
Всем привет. Работаю с неблокирующими сокетами под Linux. Не получается отследить ситуацию потери сети. Т.е., например, вынули...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru