![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование UDPSocket
bwadmin © (2002-08-27 14:43:00)Подскажите, кто имеет опыт работы с компонентом UDPSocket.
Как этот компонент заставить слушать указанный порт.
Open сделал.
Digitman (2002-08-29 13:58:00) [1]>bwAdmin
Посоветовать что-либо можно лишь при конкретной постановке задачи.
То что ты пишешь
>>реализовать передачу/получение сообщений от аппарата к аппарату
это - на "деревню дедушке" называется, а не постановка задачи и уж тем более - не исх.данные ...
ставь задачу и ее условия максимально подробно, а не "на пальцах" - будет тебе и рекомендация
Slava (2002-08-29 13:22:00) [2]> bwAdmin
С Indy не хочется, а с NM хочется?
Первое хотя бы с исходниками
bwAdmin (2002-08-29 13:10:00) [3]Есть просто "источник" и "приемник" сообщения.
Вот вот. именно так.
Ну так что можно еще в этом случае посоветовать использовать.
Digitman (2002-08-29 12:16:00) [4]>bwAdmin
При такой постановке задачи вообще нет смысла говорить о "сервере" и "клиенте". И уж тем более о том, что кто-то кого-то должен "слушать". Есть просто "источник" и "приемник" сообщения. В любой момент времени первому достаточно знать координаты приемника (адрес, порт) и "уметь" отправлять сообщение, второму - быть "привязанным" к этим координатам и "уметь" принимать сообщение.
bwAdmin (2002-08-29 12:00:00) [5]Попробовал использовать NMUDP - в принципе устраивает. Как отправляет так и слушает без видимых пока проблем.
Спасибо.
Может есть еще какие-либо возможности?
bwAdmin (2002-08-29 11:41:00) [6]Slava у меня такого демоса нет.
Но с Indy как-то не хочется. Уж очень дорого при сменен версии Indy разбираться что они куда перенесли, какие юниты переименовали.
bwAdmin (2002-08-29 11:08:00) [7]Обосновываю:
Мне нужно наиболее дешево (просто, недорого по времени и требуемым ресурсам) реализовать передачу/получение сообщений от аппарата к аппарату при каком-либо событии. Неизвестно заранее кто сервер, а кто клиент.
Если есть какой-либо дугой лучший вариант, подскажите, пожалуйста, Уважаемые.
Slava (2002-08-29 09:57:00) [8]> bwAdmin
Посмотри вот это как вариант:
c:\Program Files\Borland\Delphi6\Demos\Indy\UPDClientServer
Digitman (2002-08-29 09:33:00) [9]Реально "слушать" может лишь TCP-гнездо. Ты же делаешь упор именно на UDP-гнездо.
Тогда обоснуй выбор именно UDP-гнезда.
bwAdmin (2002-08-29 09:05:00) [10]А как же заставить реально "сушать"? Нет у меня с такими делами ну никакого опыта. Ну подскажите, плиз.
Digitman (2002-08-29 08:13:00) [11]
> also listens for requests for UDP/IP connections
Это значит, что после выполнения Open гнездо, созданное объектом UDPSocket, готово к приему (и передаче) сообщений. И не более того. Если угодно, можно интерпретировать это самое "also listens" как некое "прослушивание".
bwadmin (2002-08-28 22:36:00) [12]> DigitMan
Зачем же ты хэлп на TBaseSocket.Open привел-то ? Этот метод , скорее всего, вообще ничего не делает да и не вызывается.Ты безусловно прав. Но такова жизнь. В help написано Derived from TBaseSocket. Но ведь факты таковы, что (опять же из help) у компонента TUdpSocket имеется свойство Active. так вот если оно True, то действительно делать Open не нужно. Но это свойство опять же из baseSocket:
Indicates whether the socket connection is open and available for communication with other machines.
property Active: Boolean;
Description
Before attempting to use or change the socket connection, read Active to determine whether the connection is open and ready. For client sockets, setting Active opens or shuts down a socket connection to another machine. For server sockets, setting Active opens or shuts down a listening connection that makes the socket available for client requests.
At design time, set Active to True to make the socket open a connection when the application starts running (the default value is False). At runtime, use the Open or Close method to open or close the connection.
Но дело все в том, что указав порты и хосты, ничего не "слушается".
Привожу Help на указанный компонент:
TUdpSocket is the UDP component
Unit Sockets
Description
Use TUdpSocket to create UDP-based applications. Add a TUdpSocket object to a form or data module to turn an application into a UDP/IP client and server. TUdpSocket specifies a desired connection to a UDP/IP server, manages the connection when it is open, and terminates the connection when the application is through. It also listens for requests for UDP/IP connections from other machines and establishes connections when requests are received.
Digitman (2002-08-28 15:12:00) [13]>Malder
Не сходится.
TNMUDP = class(TComponent);
TUDPSocket = class(TBaseSocket); // а, может, и не напрямую
TBaseSocket же явно не ориентирован ни на TCP ни на UDP. Иначе - не вой черт делать какой-то там "безликий" Open виртуальным ?
Это так - мысли вслух) .. D6 все равно нет под рукой
Malder (2002-08-28 15:02:00) [14]Мне кажется, что UDPSocket это развитие TNMUDP - соответственно, никакх open не надо. Компонент сразу начинает прием сообщений
Digitman (2002-08-28 14:10:00) [15]>Malder
> А где ты видел, чтобы у компонентов работающих по UDP был
> режим listen ??? Нафига им это надо ?
А где ты увидел, что я именно о listen- режимеговорю ?
Я имел ввиду некий возможно имеющийся методListen(), который в некоем компоненте, пусть даже использующем UDP, вполне может и реализовывать некую спец.логику серверной стороны, совершенно иначе работающую нежели listen-логика для connection-oriеnted режима. Это вполне может быть и что-то типа эмуляции режима "прослушивания" или некоей диспетчеризации вход.сообщений.
У меня же нет D6 и мне неизвестно, что делает даже метод UDPSocket.Open (скорее всего как переопределенный вирт.метод TBaseSocket.Open), не говоря уже о наличии иных методов.
А по поводу TPowersock - да, согласен (не выспался видимо), напрасно упомянул его и соответствующих его наследников : все они используют TCP
>bwAdmin
Зачем же ты хэлп на TBaseSocket.Open привел-то ? Этот метод , скорее всего, вообще ничего не делает да и не вызывается. Ты приведи хэлп именно на TUDPSocket.Open - интересна именно его функциональность в плане утверждения, что такой метод действительно есть
bwAdmin (2002-08-28 13:48:00) [16]Malder, ну что ж ты так.
Мне нужно наиболее дешево (просто, недорого по времени и требуемым ресурсам) реализовать передачу/получение сообщений от аппарата к аппарату при каком-либо событии. Неизвестно заранее кто сервер, а кто клиент.
Если есть какой-либо дугой лучший вариант, подскажите, пожалуйста, Уважаемые.
Malder (2002-08-28 13:05:00) [17]Есть NMUDP-компонент в закладке "FastNet", компонент реализует класс TNMUdp. Но это - класс для реализации кл.части UDP-транспорта , а не серверной
А где ты видел, чтобы у компонентов работающих по UDPбыл режим listen ??? Нафига им это надо ? Может ты не выспался ?
Digitman (2002-08-28 09:42:00) [18]Мда .. тяжко работать "вслепую")
procedure Open; virtual;
То , что метод Open - виртуальный, дает повод для некоторых подозрений. Сдается мне, что TUDPSocket - лишь базовый класс.
А каким образом ты устанавливаешь для объекта UDPSocket режим сервера ? Как ты инициализируешь этот режим перед вызовом Open ? Какие методы/св-ва явно используешь/задаешь у этого объекта ?
bwAdmin (2002-08-28 09:27:00) [19]Creates the socket connection.
procedure Open; virtual;
Description
Call Open to create the socket connection. Descendents of TBaseSocket use Open to initiate the socket connection.
For client sockets, Open locates and connects to a server. For server sockets, Open opens the socket connection in a listening mode, but does not complete the connection to a client socket.
Digitman (2002-08-28 08:25:00) [20]
> В help написано, что OPEN и все работает
Приведи это фрагмент хэлпа. Глубоко сомневаюсь. что Open - именно для этой цели.