Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пакеты [D6, NT4, Win2k, WinXP]


Snap ©   (2003-04-21 23:38:00) 

Мне нужно подключиться к серверу, адрес которого я не знвю. В связи с этим возникает мысль о широковещательных адресах. Но просто так по широковешательному адресу обыкновенным сокетом не подключишься, так ведь? Поэтому я хочу узнать, можно ли как то послать в сеть определённый пакет, то есть не использовать канал(сокет), а именно послать один пакет, в котором я могу сам установить флаги, и адрес получателя. Ещё неплохобы также получить ответ от сервера, который тоже будет одним пакетом. Может в моей ситуации поможет UDP?


Snap   (2003-04-30 22:27:00) [1]

Всем спасибо


Illusion   (2003-04-27 14:27:00) [2]

UPD протокол не использует recv и send... это привелекия TCP... он использует sendto и recvfrom... Так как не надо создавать логические соединения.
З.Ы. с TNMUDP сталкивался в Билдере... МУТЬ ПОЛНАЯ!... Лучше уж с нуля... генерим сокет, затем осуществлям привязку сокета к окну при помощи WSAAsyncSelect... Далее делаем Application->OnMessage = OnMessage, где OnMessage - твоя йункция обработки соощений... Ловишь только сообщения сокета и разбираешся... Там нен так сложно - хелпа, чтобы разобратся хватит. Ой сорри... Application.OnMessage = OnMessage; :)... Совсем на с/с++ закодился... :)


Malder   (2003-04-26 21:24:00) [3]

При использовании этих компонентов очень немногие знаешь ли думают о хэндлах, сообщениях и прочих таких вещах

Ну и зря. Допустим, у TLabel нет метода SetFocus и быть не может. И не стоит искать. Надо как раз знать, что он не оконный - отсюда вытекают все его свойства. А как эти свойства назвали в данном компоненте - не суть важно.


Ну так ты сразу уточняй, что хочешь узнать об отличии КОМПОНЕНТОВ.

А тебе отличия TNMUDP от чего ? Этот компонент, по моему, простейший. Выставляешь свойства LocalPort, RemotePort, RemoteHost и все.

При приходе сообщения возникает событие OnDataReceived. Прочесть приходящее сообщение можно методом ReadBuffer. Отправить сообщение можно методом SendBuffer

Что неясно то ?


Snap   (2003-04-26 16:07:00) [4]

Я имел ввиду отличия использования. При использовании этих компонентов очень немногие знаешь ли думают о хэндлах, сообщениях и прочих таких вещах. Это бывает важно иногда, но главное это то что в эдит пользователь вводит инфу, а в лейбл инфу пишет прога. И вообще про эдит и лейбл я сказал потому что ты "можешь задать аналогичный вопрос".

Так не мог бы ты объяснить, чем принципиально отличается использованиекомпонентов сокетов и к примеру TNMUDP? Не различия в протоколах, заголовках пакетов, не проверку пакетов TCP, не алгоритмы деления больших пакетов, не про окна тисипи, и флаг инициализации, а как использоватьUDP компонент? Буду очень благодарен.


Malder   (2003-04-26 15:51:00) [5]

По моему, ты ахинею несешь. То есть, различие у TLabel и у TEdit в том, что у одного есть свойство Text, а у второго Caption ?!
Если ты так считаешь - то ты абсолютно неправильно подходишь к програмированию.
Если говорить об основных отличиях этих компонентов - я бы тогда уж сказал, что TEdit - это оконный компонент, который имеет свой handle и в котором пользователь может ввести данные. В отличии от TLabel, который не оконный и поэтому пользователь туда не может ввести ничего. Ну и который из вариантов правильный, по твоему, твой или мой ?


Ты спросил "чем различается использование их в дельфи". Тогда следуя твоей логике, я отвечу - "тем, что UDP сокеты работают по UDP протоколу". А использование их одинаково. И не только в Дельфе. А также в VC, VB и т.д.


Snap   (2003-04-26 13:00:00) [6]

Основное отличие заключается в том что у эдита есь свойство текст. Такого свойста нет у лэйбла, но у него есть свойство "заголовок", которо собственно и отвечает за то что будет написано на лэйбле.

Зы в лом отвечать- так не отвечай, но издеваться то зачем?


Malder   (2003-04-26 12:17:00) [7]

Не боись, сведения о сетях у меня есть

Долго думал. Не понимаю, а чего мне бояться то ?

Я не считаю сокеты протоколами

Ну и я свою очередь так не считаю. Но "просто был не в курсе что же такое UDP" - вот я тебе и попытался объяснить.

Я имел ввиду не чем они различаются как протоколы, а чем различается использование их в дельфи.

Знаешь, я могу тебе задать аналогичный вопрос. "Мне не надо знать чем отличаются TLabel и TEdit как компоненты, мне надо знать различие в их использовании в Delphi". Интересно, как ты будешь отвечать на этот вопрос ?


Snap   (2003-04-25 20:31:00) [8]

Не боись, сведения о сетях у меня есть. Я не считаю сокеты протоколами. Сокет это логические объекты системы (в переводе гнездо).
Про различия ты похож не понял. Я имел ввиду не чем они различаются как протоколы, а чем различается использование их в дельфи.
ДНС не подходит в любом случае, специфика моей задачи.


Malder   (2003-04-24 18:45:00) [9]

Эх, я, конечно, понимаю дикое желание написать как можно быстрее как можно более "кульную" программу. Но без знаний вряд ли получится что-то хорошее. Ты бы прочитал про протоколы, сети, программирование сокетов. Да, это может занять много времени, но куда меньше, чем долбежка примитивными вопросами различных форумов. Информации в интернете - просто море. Такие вопросы как у тебя просто не должны возникать.

>просто был не в курсе что же такое UDP

это протокол такой. Как и TCP

А в чём принципиальные отличия ЮДП клиентских и серверных сокетов от простых?

Что ты называешь простыми сокетами ? TCP что ли ? :)

Главное отличие протокола UDP от TCP в том, что UDP не гарантирует доставку данных. То есть, ты послал и все. Подтверждения о доставке не жди. Ты, конечно, можешь реализовать подверждение в контексте UDP протокола, но будешь делать это своими силами. В отличие от TCP, где доставка данных и их подтверждение снимается с плеч программиста. То есть, посылать файлы с помощью UDP не надо. А вот сделать запрос к DNS или как в твоем случае "спросить" о наличии сервера в сети - самое оно.

Поэтому UDP используется для широковещательных сообщений (broadcast). Ты посылашь на броадкаст адрес сети UDP пакет и он приходит (в идеале) на все компьютеры этой сети. Ответить - удел каждого компьютера. Скорее всего ответит только сервер, для этого используй уникальный порт UDP не занятый стандартными службами, а в теле сообщения "поясняй" что тебе нужно, чтобы совсем исключить возможную путаницу.

И почему достака пакета всем машинам сети зависит от маршрутизации? Поясни

Ну а этот вопрос просто из разряда "программеры шутят". Если ты знаешь, что такое маршрутизация - то такого вопроса возникнуть не должно. Если не знаешь, что такое маршрутизация - почему тебя удивляет, что она может влиять на пакеты ? :))


Snap   (2003-04-24 01:46:00) [10]

Да нет, общую идею я в принципе знал, просто был не в курсе что же такое UDP. А в чём принципиальные отличия ЮДП клиентских и серверных сокетов от простых?
И почему достака пакета всем машинам сети зависит от маршрутизации? Поясни.


Malder   (2003-04-23 17:55:00) [11]

Ну так в чем проблема ?

Посылаешь широковещательный пакет на порт, который открыт у сервера по протоколу UDP. Этот пакет придет на все компьютеры в сети (ну зависит от маршрутизации, ну допустим на все) на указанный тобой порт. По идее, ответить должен только сервер. В теле сообщения можешь указать что-то типа "Address?". Сервер увидев такое сообщение может отослать обратный UDP пакет уже непосредственно отправителю (чтобы не загружать сеть еще одним броадкастом), где укажет свой IP адрес. Ну и все, далее по TCP/IP (или какой там у тебя протокол) по узнанному тобой адресу отправляй запрос на коннект.

Собственно говоря, такой вариант работы постепенно трансформируется в идею DNS серверов. То есть, тебе не нужно знать IP адрес компьютера в сети. Тебе просто нужно знать его имя, а DNS сервер тебе уже скажет его IP адрес, который может динамически меняться.


Snap   (2003-04-22 23:56:00) [12]

Сеть локальная. Где то в ней находится сервер, к которому мне надо подключится. Но точного его адреса я не знаю (не IP, не физического).


Malder   (2003-04-22 22:02:00) [13]

Как-то ты очень образно описал проблему...

У тебя локальная сеть ? Или ты хочешь провернуть это в интренете ?


Snap   (2003-04-22 20:03:00) [14]

Ап


Наверх

Титульная страница Поиск, карта сайта Написать письмо