41

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

Логічно, що треба. Ви взагалі розумієте, що саме робить Bind?

42

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

koala написав:

Логічно, що треба. Ви взагалі розумієте, що саме робить Bind?

Типу прив'язує сокет до ендПоінта аби він знав, який порт і діапазон IP слухати на предмет надходження даних?

43

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

Трохи не так: щоб система знала, до якої програми перенаправляти пакети, що надходять.

44

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

koala написав:

Трохи не так: щоб система знала, до якої програми перенаправляти пакети, що надходять.

ну я це теж чув, але толку з того, від цього нічого не запрацює. Так от я ж і хтів дізнатись, чи можливе таке, що клієнт запускається і починає приймати повідомлення без Bind'a, та без попередньої відправки повідомлення серверу? А якщо ні, то чому тоді він гарно приймає повідомлення без Bind'а, але з попередньою відправкою повідомлення при умові, що сервер увімкненний? Адже при відправці ми не знаємо, увімкненний сервер, чи ні, прийняв він повідомлення, чи ні, тому якщо подумати, то немає різниці, увімкненний сервер чи ні, але все ж таки має... а чому - хз. Питав вже на самому msdn'і, а там якусь фігню мелють, наче ото я зовсім дурний...
http://social.msdn.microsoft.com/Forums … arpgeneral

45

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

Взагалі нічого не розумію. Як ви без Bind по UDP щось приймаєте?

46

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

koala написав:

Взагалі нічого не розумію. Як ви без Bind по UDP щось приймаєте?

от зробив я сокет UDP-ковський.
далі пишу

socket.Send(//щось тут відправляю на сервер);

Далі я приймаю

socket.BeginReceiveFrom(//тут пишу усяку фігню);

І тепер! Якщо сервер був увімкненний під час того, як я відправляв дані, то BeginReceiveFrom нормально запускається і приймає дані. А якщо сервер був відключений, то вилазить помилка про те, що "Удаленный хост принудительно закрыл существующее соединение" чи як там воно.

47

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

Тобто ви робите якусь фігню замість нормальної роботи, отримуєте у відповідь якусь фігню і цьому дивуєтеся?
Ще раз, на пальцях: як працює відправка UDP: відправник просто запускає в мережу пакет. Без створення з'єднань. Без потоків. Без контролю з боку системи. Просто гукає - і все. Якщо пакет доходить до отримувача, то якщо в отримувача хтось вже записався на отримання пакетів з цього порту (той самий Bind) - він отримує пакет. Якщо ніхто не записався - комп робить вигляд, що нічого не було, пакет губиться, ніхто нікому нічого не винен.
А ви замість того, щоб взяти стандартний UdpClient, пишете велосипед, причому навіть не намагаєтеся відтворити протокол, і вішаєте колесо замість руля.

48

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

koala написав:

Тобто ви робите якусь фігню замість нормальної роботи, отримуєте у відповідь якусь фігню і цьому дивуєтеся?
Ще раз, на пальцях: як працює відправка UDP: відправник просто запускає в мережу пакет. Без створення з'єднань. Без потоків. Без контролю з боку системи. Просто гукає - і все. Якщо пакет доходить до отримувача, то якщо в отримувача хтось вже записався на отримання пакетів з цього порту (той самий Bind) - він отримує пакет. Якщо ніхто не записався - комп робить вигляд, що нічого не було, пакет губиться, ніхто нікому нічого не винен.
А ви замість того, щоб взяти стандартний UdpClient, пишете велосипед, причому навіть не намагаєтеся відтворити протокол, і вішаєте колесо замість руля.

так я ж як раз почав використовувати той UDPClient, але ж я вам пояснював, чому я не використовую Bind, тому що два рази викликати Bind для одного EndPoint'а не можна. А мені потрібно запускати багато клієнтів на одному ПК.

49

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

Так. Як для маленького. У вас на одному хості два клієнти, правильно? Тоді, коли на хост надходить пакет, якимось чином має визначатися, для якого саме клієнта він призначений - тому і не може бути двох клієнтів на одному ендпоінті, це системна вимога. Не можуть по одних рейках два поїзда проїхати в різні боки. Не може в один чобіт дві ноги влізти. Ферштейн? А для того, щоб якось клієнтів розвести, або у хоста мають бути різні IP, по одному на клієнта, або різні клієнти мають слухати різні порти, очевидно ж.
А сервер буде дізнаватися, які саме порти у клієнтів, з повідомлень клієнтів, що запустилися.

50

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

koala написав:

Так. Як для маленького. У вас на одному хості два клієнти, правильно? Тоді, коли на хост надходить пакет, якимось чином має визначатися, для якого саме клієнта він призначений - тому і не може бути двох клієнтів на одному ендпоінті, це системна вимога. Не можуть по одних рейках два поїзда проїхати в різні боки. Не може в один чобіт дві ноги влізти. Ферштейн? А для того, щоб якось клієнтів розвести, або у хоста мають бути різні IP, по одному на клієнта, або різні клієнти мають слухати різні порти, очевидно ж.
А сервер буде дізнаватися, які саме порти у клієнтів, з повідомлень клієнтів, що запустилися.

ось це вже більше схоже на правду. Я бачив в тих EndPoint'ах порти типу 53134 чи якось так, але не розумів, чому так хД Я ЗРОЗУМІВ!
Дивіться, коли я відправляю повідомлення перш ніж приймати, береться мій IP і вільний порт ага? І тоді сервер приймає повідомлення, запам'ятовує цей IP і порт і відправляє на нього щось, а клієнт тим часом бере створенний EndPoint з тим рандомним портом і приймає на нього повідомлення?

51

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

ні, нічо незрозуміло

52

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

Що незрозуміло? На сервері Bind-ите порт, який буде слухати сервер. На клієнті Bind-ите порт для клієнта і надсилаєте серверу запит з вказанням порта клієнта. Сервер запам'ятовує, що клієнт такий-то на такому-то IP:порті і починає обмін з клієнтом. Все в ваших руках. Що складного?

53

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

koala написав:

Що незрозуміло? На сервері Bind-ите порт, який буде слухати сервер. На клієнті Bind-ите порт для клієнта і надсилаєте серверу запит з вказанням порта клієнта. Сервер запам'ятовує, що клієнт такий-то на такому-то IP:порті і починає обмін з клієнтом. Все в ваших руках. Що складного?

Bind на клієнті непотрібен. Не бачив жодного прикладу клієнт-сервера, де б клієнт використовував Bind.
Я вже переписав все з використанням UDPClient, і зрозумів логіку того, чому для початку прийняття даних клієнт спочатку має відправити їх. Разом з відправкою даних серверу, відправляється EndPoint клієнта, і тоді сервер знає, куди відправляти повідомлення. Але чому це ніде детально не описано я хз. Може це я щось туплю і це все має бути очевидним, чи ще щось.. І так, я бачу, в Вас вселився демон недовіри, от вам архів, ніяких Bind'ів в клієнті немає. Запускайте купу клієнтів і дивіться, як воно працює, а потім спробуйте зробити це ж саме з Bind'ами.

Post's attachments

Projects.zip 92.79 kb, 355 downloads since 2014-04-22 

54

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

The LocalEndPoint property is usually set after you make a call to the Bind method. If you allow the system to assign your socket's local IP address and port number, the LocalEndPoint property will be set after the first I/O operation. For connection-oriented protocols, the first I/O operation would be a call to the Connect or Accept method. For connectionless protocols, the first I/O operation would be any of the send or receive calls.

55

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

USUALLY

56

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

Ну, якщо ви настільки опанували предмет, що можете спокійно відступати від звичайних практик - то будь ласка.

57

Re: Поясніть за UDP-протокол, як запустити декілька клієнтів на одному ПК?

koala написав:

Ну, якщо ви настільки опанували предмет, що можете спокійно відступати від звичайних практик - то будь ласка.

Що значить - "відступати від звичайних практик?" Я вам кажу, що два рази для одного EndPoint'а не можна викликати Bind, тому з вашим Біндом я не зможу запустити два клієнта.