Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444

Использование сокета в качестве сервера или клиента по ситуации

02.07.2017, 17:19. Показов 1432. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В большинстве клиент-серверных приложений сначала запускают сервер , затем клиентов. Но захотелось автоматизации , те автоматического определения кто сервер , кто клиент . Значит если подключится методом Connect не удалось , то выступать в качестве сервера. Вот как я это написал :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
IPEndPoint IpPoint = new IPEndPoint( IPAddress.Loopback , 8005);
                Socket MailSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
                try
                {
                    MailSocket.Connect(IpPoint);
                    Console.WriteLine("Подключен!");
                }    catch(SocketException)
                {
                    MailSocket.Disconnect(true);
                    Console.WriteLine("Вы являетесь сервером!Ожидание подключений...");
                    MailSocket.Bind(IpPoint);
                    MailSocket.Listen(10);
                }
Ошибка такая :
C#
1
2
3
4
5
6
System.Net.Sockets.SocketException (0x80004005): Запрос на отправку или получени
е данных  (when sending on a datagram socket using a sendto call) no address was
 supplied
   в System.Net.Sockets.Socket.Disconnect(Boolean reuseSocket)
   в SocketTcpServer.Mail.Program.Main(String[] args) в c:\Users\RAE.Denis-PC\Do
cuments\SharpDevelop Projects\WEB\WEB\Program.cs:строка 90
Без использования MailSocket.Disconnect(true); такая :

Ошибка в строке с методом Bind или Disconnect.
Почему не получается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2017, 17:19
Ответы с готовыми решениями:

Как обратиться с сервера на клиент (или как выйти из безнадежной ситуации)
Здравствуйте.Проблема стоит в том что набор записей регистра сведений проверяет наличие изменений значений в ресурсах (берется новый...

Формировать блоки на стороне клиента или сервера?
Как делают правильно и есть ли разница ? Сформировать блок на php, и передать через json.А JS уже выведет просто код. //...

линкование сервера чата CommFort или клиента
Всем доброе время суток! =) Хотел бы поднять тему про линкование сервера чата CommFort или клиента возможно ли это или нет? Я вот...

5
Эксперт .NET
 Аватар для Usaga
14100 / 9317 / 1349
Регистрация: 21.01.2016
Сообщений: 34,993
06.07.2017, 07:09
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Значит если подключится методом Connect не удалось , то выступать в качестве сервера.
Ну нифига себе Тип, если не смогли подключиться к почтовому серверу, то сами им становимся? А какой в этом смысл?
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
06.07.2017, 22:18  [ТС]
Все просто. Допустим есть юзер1 и юзер2. Первый зашел раньше второго - стал сервером. Второй подключился. Я писал по обычаю , чат . И там юзерам нужно договорится кто будет выступать в качестве сервера , чтоб не было ситуации с 2 клиентами или серверами. А для них ведь это лишнее , их это вообще не интересует. Но это я так , просто идея пришла. Ну и выходит что в качестве клиента или сервера может выступать одна и таже программа , это тоже как плюс в простоте эксплуатации.

Добавлено через 5 минут
Я , кстати , разобрался . После вызова метода Connect , даже в случае неудачи , сокет нельзя использовать для дальнейшего подключения к той же точке. Можно вызывать Disсonnect , но опять же будет работать только если выбрать другую конечную точку.

Добавлено через 2 минуты

Не по теме:


Ну а вообще печально , это я исправил , но после 4-х часовой возни , все просто не работало) Даже эксепшины не вылетали. А жаль , столько времени.

0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
25.07.2017, 15:52
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Все просто.
RaevskiAnatoly, все просто реализуется в WCF. Там есть такая штука, автообнаружение. Приложение может находить и подключаться к другому приложению, если оно соответствует определенным критериям поиска. Если никого не обнаружено-приложение становится сервером, как вам и хотелось)))
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
25.07.2017, 16:15  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
RaevskiAnatoly, все просто реализуется в WCF.
Да я беспредельно этому рад , но то , что я писал (тело темы) , пример не банальной практики при изучении сокетов и я вовсе не нуждался в определение идеально подходящей технологии для решения задачи. Ведь даже без такого бессмысленного примера , я врятли бы узнал что "После вызова метода Connect , даже в случае неудачи , сокет нельзя использовать для дальнейшего подключения к той же точке".Только и всего , нужно же что-то писать отличное от примеров в гидах , иначе при написании чего-либо большего , не зная базовых проблем , можно потратить огромное количество времени на поиск ошибки.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
29.07.2017, 14:15
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
бессмысленного примера
Пора бы переставать писать такие примеры и браться за изучение программирования всерьез, а не пробежал тему и забыл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2017, 14:15
Помогаю со студенческими работами здесь

Что лучше установить WIN2000 или NT в качестве сервера?
Здравствуйте Если не трудно дайте совет, что лучше установить WIN2000 или NT в качестве сервера Спасибо за любые советы С уважением

Копирование сокета или передача сокета в функцию
Добрый день всем, столкнулся с тем что не могу скопировать сокет. boost::asio::ip::tcp::socket socket(io_service); ...

Использование ссылок или указателей в качестве обычного объекта
Возвращаю ссылку, но происходит копирование. Можно ли как-то избежать копирования и освободить пользователя от подобной формы записи A&...

Использование int или void в качестве возвращаемого типа для main()
Когда использовать int main, а когда void main?

Ошибка при закрытии неблокирующего сокета со стороны клиента
Здравствуйте, уважаемые. Столкнулся с такой вот проблемой. Сделал набросок сервера на неблокирующих сокетах, вродебы все сносно и можно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru