Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.31;
Скачать: CL | DM;

Вниз

Использование UDPSocket   Найти похожие ветки 

 
bwadmin   (2002-08-27 14:43) [0]

Подскажите, кто имеет опыт работы с компонентом UDPSocket.
Как этот компонент заставить слушать указанный порт.
Open сделал.


 
Digitman ©   (2002-08-27 15:25) [1]

не знаю такого компонента, но скорее всего (если он вообще поддерживает серв.ф-ции) что-то типа метода listen


 
bwAdmin   (2002-08-27 15:51) [2]

UDPSocket - в закладке Internet. В help написано, что OPEN и все работает. Но фокус не получается. Если кто пользовал, помогите, пожалуйста.


 
Digitman ©   (2002-08-27 17:00) [3]

Нет таких в закладке "Internet". По кр.мере - в D5.
Есть NMUDP-компонент в закладке "FastNet", компонент реализует класс TNMUdp. Но это - класс для реализации кл.части UDP-транспорта , а не серверной. Метода Listen у него нет.
Зато Listen есть у TPowersock и у всех компонентов вида NMxxxxServ (той же вкладки) - эти компоненты могут быть использованы с большим или меньшим успехом/сложностями на серверной стороне.


 
bwAdmin   (2002-08-27 19:26) [4]

Речь идет о D6.


 
Digitman ©   (2002-08-28 08:25) [5]


> В help написано, что OPEN и все работает


Приведи это фрагмент хэлпа. Глубоко сомневаюсь. что Open - именно для этой цели.


 
bwAdmin   (2002-08-28 09:27) [6]

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 09:42) [7]

Мда .. тяжко работать "вслепую")


procedure Open; virtual;

То , что метод Open - виртуальный, дает повод для некоторых подозрений. Сдается мне, что TUDPSocket - лишь базовый класс.

А каким образом ты устанавливаешь для объекта UDPSocket режим сервера ? Как ты инициализируешь этот режим перед вызовом Open ? Какие методы/св-ва явно используешь/задаешь у этого объекта ?


 
Malder ©   (2002-08-28 13:05) [8]

Есть NMUDP-компонент в закладке "FastNet", компонент реализует класс TNMUdp. Но это - класс для реализации кл.части UDP-транспорта , а не серверной

А где ты видел, чтобы у компонентов работающих по UDP был режим listen ??? Нафига им это надо ? Может ты не выспался ?


 
bwAdmin   (2002-08-28 13:48) [9]

Malder, ну что ж ты так.
Мне нужно наиболее дешево (просто, недорого по времени и требуемым ресурсам) реализовать передачу/получение сообщений от аппарата к аппарату при каком-либо событии. Неизвестно заранее кто сервер, а кто клиент.
Если есть какой-либо дугой лучший вариант, подскажите, пожалуйста, Уважаемые.


 
Digitman ©   (2002-08-28 14:10) [10]

>Malder


> А где ты видел, чтобы у компонентов работающих по UDP был
> режим listen ??? Нафига им это надо ?


А где ты увидел, что я именно о listen- режиме говорю ?
Я имел ввиду некий возможно имеющийся метод Listen(), который в некоем компоненте, пусть даже использующем UDP, вполне может и реализовывать некую спец.логику серверной стороны, совершенно иначе работающую нежели listen-логика для connection-oriеnted режима. Это вполне может быть и что-то типа эмуляции режима "прослушивания" или некоей диспетчеризации вход.сообщений.

У меня же нет D6 и мне неизвестно, что делает даже метод UDPSocket.Open (скорее всего как переопределенный вирт.метод TBaseSocket.Open), не говоря уже о наличии иных методов.

А по поводу TPowersock - да, согласен (не выспался видимо), напрасно упомянул его и соответствующих его наследников : все они используют TCP

>bwAdmin

Зачем же ты хэлп на TBaseSocket.Open привел-то ? Этот метод , скорее всего, вообще ничего не делает да и не вызывается. Ты приведи хэлп именно на TUDPSocket.Open - интересна именно его функциональность в плане утверждения, что такой метод действительно есть


 
Malder ©   (2002-08-28 15:02) [11]

Мне кажется, что UDPSocket это развитие TNMUDP - соответственно, никакх open не надо. Компонент сразу начинает прием сообщений


 
Digitman ©   (2002-08-28 15:12) [12]

>Malder

Не сходится.
TNMUDP = class(TComponent);
TUDPSocket = class(TBaseSocket); // а, может, и не напрямую

TBaseSocket же явно не ориентирован ни на TCP ни на UDP. Иначе - не вой черт делать какой-то там "безликий" Open виртуальным ?

Это так - мысли вслух) .. D6 все равно нет под рукой


 
bwadmin   (2002-08-28 22:36) [13]

> 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-29 08:13) [14]


> also listens for requests for UDP/IP connections


Это значит, что после выполнения Open гнездо, созданное объектом UDPSocket, готово к приему (и передаче) сообщений. И не более того. Если угодно, можно интерпретировать это самое "also listens" как некое "прослушивание".


 
bwAdmin   (2002-08-29 09:05) [15]

А как же заставить реально "сушать"? Нет у меня с такими делами ну никакого опыта. Ну подскажите, плиз.


 
Digitman ©   (2002-08-29 09:33) [16]

Реально "слушать" может лишь TCP-гнездо. Ты же делаешь упор именно на UDP-гнездо.

Тогда обоснуй выбор именно UDP-гнезда.


 
Slava ©   (2002-08-29 09:57) [17]

> bwAdmin

Посмотри вот это как вариант:
c:\Program Files\Borland\Delphi6\Demos\Indy\UPDClientServer


 
bwAdmin   (2002-08-29 11:08) [18]

Обосновываю:
Мне нужно наиболее дешево (просто, недорого по времени и требуемым ресурсам) реализовать передачу/получение сообщений от аппарата к аппарату при каком-либо событии. Неизвестно заранее кто сервер, а кто клиент.
Если есть какой-либо дугой лучший вариант, подскажите, пожалуйста, Уважаемые.


 
bwAdmin   (2002-08-29 11:41) [19]

Slava у меня такого демоса нет.
Но с Indy как-то не хочется. Уж очень дорого при сменен версии Indy разбираться что они куда перенесли, какие юниты переименовали.


 
bwAdmin   (2002-08-29 12:00) [20]

Попробовал использовать NMUDP - в принципе устраивает. Как отправляет так и слушает без видимых пока проблем.
Спасибо.

Может есть еще какие-либо возможности?


 
Digitman ©   (2002-08-29 12:16) [21]

>bwAdmin

При такой постановке задачи вообще нет смысла говорить о "сервере" и "клиенте". И уж тем более о том, что кто-то кого-то должен "слушать". Есть просто "источник" и "приемник" сообщения. В любой момент времени первому достаточно знать координаты приемника (адрес, порт) и "уметь" отправлять сообщение, второму - быть "привязанным" к этим координатам и "уметь" принимать сообщение.


 
bwAdmin   (2002-08-29 13:10) [22]

Есть просто "источник" и "приемник" сообщения.
Вот вот. именно так.
Ну так что можно еще в этом случае посоветовать использовать.


 
Slava ©   (2002-08-29 13:22) [23]

> bwAdmin

С Indy не хочется, а с NM хочется?

Первое хотя бы с исходниками


 
Digitman ©   (2002-08-29 13:58) [24]

>bwAdmin

Посоветовать что-либо можно лишь при конкретной постановке задачи.

То что ты пишешь

>>реализовать передачу/получение сообщений от аппарата к аппарату

это - на "деревню дедушке" называется, а не постановка задачи и уж тем более - не исх.данные ...

ставь задачу и ее условия максимально подробно, а не "на пальцах" - будет тебе и рекомендация



Страницы: 1 вся ветка

Текущий архив: 2002.10.31;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.011 c
14-101488
Николай Быков
2002-10-11 18:25
2002.10.31
Простите мен за всё...


14-101441
qube
2002-10-08 17:19
2002.10.31
Мастера! Поделитесь воспоминаниями, как кто программистом стал.


3-101075
Azbul
2002-10-13 17:31
2002.10.31
проблема с table1.Post


1-101360
Keplin Sergey
2002-10-20 20:43
2002.10.31
Frames


1-101218
brestmarket
2002-10-21 17:56
2002.10.31
Необходимо создать свой закрытыйформат БД, напр. как в Lingvo