Текущий архив: 2003.07.07;
Скачать: CL | DM;
Вниз
Пакеты Найти похожие ветки
← →
Snap (2003-04-21 23:38) [0]Мне нужно подключиться к серверу, адрес которого я не знвю. В связи с этим возникает мысль о широковещательных адресах. Но просто так по широковешательному адресу обыкновенным сокетом не подключишься, так ведь? Поэтому я хочу узнать, можно ли как то послать в сеть определённый пакет, то есть не использовать канал(сокет), а именно послать один пакет, в котором я могу сам установить флаги, и адрес получателя. Ещё неплохобы также получить ответ от сервера, который тоже будет одним пакетом. Может в моей ситуации поможет UDP?
← →
Snap (2003-04-22 20:03) [1]Ап
← →
Malder (2003-04-22 22:02) [2]Как-то ты очень образно описал проблему...
У тебя локальная сеть ? Или ты хочешь провернуть это в интренете ?
← →
Snap (2003-04-22 23:56) [3]Сеть локальная. Где то в ней находится сервер, к которому мне надо подключится. Но точного его адреса я не знаю (не IP, не физического).
← →
Malder (2003-04-23 17:55) [4]Ну так в чем проблема ?
Посылаешь широковещательный пакет на порт, который открыт у сервера по протоколу UDP. Этот пакет придет на все компьютеры в сети (ну зависит от маршрутизации, ну допустим на все) на указанный тобой порт. По идее, ответить должен только сервер. В теле сообщения можешь указать что-то типа "Address?". Сервер увидев такое сообщение может отослать обратный UDP пакет уже непосредственно отправителю (чтобы не загружать сеть еще одним броадкастом), где укажет свой IP адрес. Ну и все, далее по TCP/IP (или какой там у тебя протокол) по узнанному тобой адресу отправляй запрос на коннект.
Собственно говоря, такой вариант работы постепенно трансформируется в идею DNS серверов. То есть, тебе не нужно знать IP адрес компьютера в сети. Тебе просто нужно знать его имя, а DNS сервер тебе уже скажет его IP адрес, который может динамически меняться.
← →
Snap (2003-04-24 01:46) [5]Да нет, общую идею я в принципе знал, просто был не в курсе что же такое UDP. А в чём принципиальные отличия ЮДП клиентских и серверных сокетов от простых?
И почему достака пакета всем машинам сети зависит от маршрутизации? Поясни.
← →
Malder (2003-04-24 18:45) [6]Эх, я, конечно, понимаю дикое желание написать как можно быстрее как можно более "кульную" программу. Но без знаний вряд ли получится что-то хорошее. Ты бы прочитал про протоколы, сети, программирование сокетов. Да, это может занять много времени, но куда меньше, чем долбежка примитивными вопросами различных форумов. Информации в интернете - просто море. Такие вопросы как у тебя просто не должны возникать.
>просто был не в курсе что же такое UDP
это протокол такой. Как и TCP
А в чём принципиальные отличия ЮДП клиентских и серверных сокетов от простых?
Что ты называешь простыми сокетами ? TCP что ли ? :)
Главное отличие протокола UDP от TCP в том, что UDP не гарантирует доставку данных. То есть, ты послал и все. Подтверждения о доставке не жди. Ты, конечно, можешь реализовать подверждение в контексте UDP протокола, но будешь делать это своими силами. В отличие от TCP, где доставка данных и их подтверждение снимается с плеч программиста. То есть, посылать файлы с помощью UDP не надо. А вот сделать запрос к DNS или как в твоем случае "спросить" о наличии сервера в сети - самое оно.
Поэтому UDP используется для широковещательных сообщений (broadcast). Ты посылашь на броадкаст адрес сети UDP пакет и он приходит (в идеале) на все компьютеры этой сети. Ответить - удел каждого компьютера. Скорее всего ответит только сервер, для этого используй уникальный порт UDP не занятый стандартными службами, а в теле сообщения "поясняй" что тебе нужно, чтобы совсем исключить возможную путаницу.
И почему достака пакета всем машинам сети зависит от маршрутизации? Поясни
Ну а этот вопрос просто из разряда "программеры шутят". Если ты знаешь, что такое маршрутизация - то такого вопроса возникнуть не должно. Если не знаешь, что такое маршрутизация - почему тебя удивляет, что она может влиять на пакеты ? :))
← →
Snap (2003-04-25 20:31) [7]Не боись, сведения о сетях у меня есть. Я не считаю сокеты протоколами. Сокет это логические объекты системы (в переводе гнездо).
Про различия ты похож не понял. Я имел ввиду не чем они различаются как протоколы, а чем различается использование их в дельфи.
ДНС не подходит в любом случае, специфика моей задачи.
← →
Malder (2003-04-26 12:17) [8]Не боись, сведения о сетях у меня есть
Долго думал. Не понимаю, а чего мне бояться то ?
Я не считаю сокеты протоколами
Ну и я свою очередь так не считаю. Но "просто был не в курсе что же такое UDP" - вот я тебе и попытался объяснить.
Я имел ввиду не чем они различаются как протоколы, а чем различается использование их в дельфи.
Знаешь, я могу тебе задать аналогичный вопрос. "Мне не надо знать чем отличаются TLabel и TEdit как компоненты, мне надо знать различие в их использовании в Delphi". Интересно, как ты будешь отвечать на этот вопрос ?
← →
Snap (2003-04-26 13:00) [9]Основное отличие заключается в том что у эдита есь свойство текст. Такого свойста нет у лэйбла, но у него есть свойство "заголовок", которо собственно и отвечает за то что будет написано на лэйбле.
Зы в лом отвечать- так не отвечай, но издеваться то зачем?
← →
Malder (2003-04-26 15:51) [10]По моему, ты ахинею несешь. То есть, различие у TLabel и у TEdit в том, что у одного есть свойство Text, а у второго Caption ?!
Если ты так считаешь - то ты абсолютно неправильно подходишь к програмированию.
Если говорить об основных отличиях этих компонентов - я бы тогда уж сказал, что TEdit - это оконный компонент, который имеет свой handle и в котором пользователь может ввести данные. В отличии от TLabel, который не оконный и поэтому пользователь туда не может ввести ничего. Ну и который из вариантов правильный, по твоему, твой или мой ?
Ты спросил "чем различается использование их в дельфи". Тогда следуя твоей логике, я отвечу - "тем, что UDP сокеты работают по UDP протоколу". А использование их одинаково. И не только в Дельфе. А также в VC, VB и т.д.
← →
Snap (2003-04-26 16:07) [11]Я имел ввиду отличия использования. При использовании этих компонентов очень немногие знаешь ли думают о хэндлах, сообщениях и прочих таких вещах. Это бывает важно иногда, но главное это то что в эдит пользователь вводит инфу, а в лейбл инфу пишет прога. И вообще про эдит и лейбл я сказал потому что ты "можешь задать аналогичный вопрос".
Так не мог бы ты объяснить, чем принципиально отличается использование компонентов сокетов и к примеру TNMUDP? Не различия в протоколах, заголовках пакетов, не проверку пакетов TCP, не алгоритмы деления больших пакетов, не про окна тисипи, и флаг инициализации, а как использовать UDP компонент? Буду очень благодарен.
← →
Malder (2003-04-26 21:24) [12]При использовании этих компонентов очень немногие знаешь ли думают о хэндлах, сообщениях и прочих таких вещах
Ну и зря. Допустим, у TLabel нет метода SetFocus и быть не может. И не стоит искать. Надо как раз знать, что он не оконный - отсюда вытекают все его свойства. А как эти свойства назвали в данном компоненте - не суть важно.
Ну так ты сразу уточняй, что хочешь узнать об отличии КОМПОНЕНТОВ.
А тебе отличия TNMUDP от чего ? Этот компонент, по моему, простейший. Выставляешь свойства LocalPort, RemotePort, RemoteHost и все.
При приходе сообщения возникает событие OnDataReceived. Прочесть приходящее сообщение можно методом ReadBuffer. Отправить сообщение можно методом SendBuffer
Что неясно то ?
← →
Illusion (2003-04-27 14:27) [13]UPD протокол не использует recv и send... это привелекия TCP... он использует sendto и recvfrom... Так как не надо создавать логические соединения.
З.Ы. с TNMUDP сталкивался в Билдере... МУТЬ ПОЛНАЯ!... Лучше уж с нуля... генерим сокет, затем осуществлям привязку сокета к окну при помощи WSAAsyncSelect... Далее делаем Application->OnMessage = OnMessage, где OnMessage - твоя йункция обработки соощений... Ловишь только сообщения сокета и разбираешся... Там нен так сложно - хелпа, чтобы разобратся хватит. Ой сорри... Application.OnMessage = OnMessage; :)... Совсем на с/с++ закодился... :)
← →
Snap (2003-04-30 22:27) [14]Всем спасибо
Страницы: 1 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.007 c