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

Вниз

Не удается прочитать строку из сети протоколом UDP   Найти похожие ветки 

 
INTAARI ©   (2003-07-02 12:59) [0]

Передал сообщение в сеть, а проверить не удается. При компиляции выдает ошибку:
[Error] Ports.pas(546): There is no overloaded version of "ReceiveString" that can be called with these arguments
Вот фрагмент кода не понятна ошибка.

Sendstr:="MURMAN1";
SEND_Port.PutString(Sendstr);
IdUDPClient1.Send("127.0.0.1",1024,Sendstr);
( "127.0.0.1",1024,-1)
Передал сообщение в сеть, а проверить не удается. При компиляции выдает ошибку:
[Error] Ports.pas(546): There is no overloaded version of "ReceiveString" that can be called with these arguments
Вот фрагмент кода не понятна ошибка.

Sendstr:="MURMAN1";
SEND_Port.PutString(Sendstr);
IdUDPClient1.Send("127.0.0.1",1024,Sendstr);
label2.Caption:=IdUDPClient1.ReceiveString("127.0.0.1",1024,-1);


 
Digitman ©   (2003-07-02 13:06) [1]

приведи прототип метода ReceiveString()
хэлпа под рукой нет у меня


 
vuk ©   (2003-07-02 13:28) [2]

function ReceiveString(const AMSec: Integer = IdTimeoutDefault): string; overload;

function ReceiveString( var VPeerIP: string; var VPeerPort: integer;
const AMSec: Integer = IdTimeoutDefault): string; overload;

Вариант, который Вы пытаетесь вызвать приведен вторым. Обратите внимание на var. То есть это не хост и порт, откуда вы ожидаете данных, а переменные, куда запишется информация о том, откуда пришел пакет.


 
Digitman ©   (2003-07-02 13:44) [3]


> INTAARI


см. <vuk>
это - азы Паскаля) ... не имеющие ничего общего с сетевыми технологиями)


 
INTAARI ©   (2003-07-02 13:45) [4]


> vuk ©


То есть вызов функции правильный, надо только ввести переменные.


 
Digitman ©   (2003-07-02 13:50) [5]


> INTAARI © (02.07.03 13:45)



> надо только ввести переменные


надо.

и , кр.того, следует еще почитать о UDP-протоколе, который в плане его connectionless-особенностей в таких ситуациях зародит тень сомнения в правильности передачи номера порта константой, даже если с Паскалем - проблемы)


 
vuk ©   (2003-07-02 14:13) [6]

to Digitman:
Если не ошибаюсь, то с UDP как раз все просто - все приходит и уходит ровно на тот порт, на который указано.


 
INTAARI ©   (2003-07-02 14:16) [7]

Порописал переменные, но данные в метке не появляютя, хотя обновление происходит. Может воспользоваться другими процедурами или компонентами.


 
vuk ©   (2003-07-02 14:21) [8]

to INTAARI:
А может Вам не UDPClient использовать, а UDPServer?


 
Digitman ©   (2003-07-02 14:43) [9]


> vuk


по поводу "приходит" - ошибаешься.

и вот подтверждение :

The Windows Sockets recvfrom function receives a datagram and stores the source address.

int recvfrom (

SOCKET s,
char FAR* buf,
int len,
int flags,
struct sockaddr FAR* from,
int FAR* fromlen
);


Parameters

s

[in] A descriptor identifying a bound socket.

buf

[out] A buffer for the incoming data.

len

[in] The length of buf.

flags

[in] Specifies the way in which the call is made.

from

[out] An optional pointer to a buffer which will hold the source address upon return.

fromlen

[in/out] An optional pointer to the size of the from buffer.

надеюсь, спецификатор out говорит сам за себя.


 
INTAARI ©   (2003-07-02 15:06) [10]


> vuk © (02.07.03 14:21)

Спасибо за совет, действительно работает, только не совсем понятно как правильно использовать AMes в функции IdUDPServer1.ReceiveString("127.0.0.1",1024, -1) по умолчанию он -1 тогда ничего не происходит, а если изменить то прием идет но потом прога похоже виснет, не выполняются др операции. Подскажите как пользоваться AMes в случае если я сообщение передаю с интервалом 60 сек.


 
vuk ©   (2003-07-02 17:13) [11]

to Digitman:
>надеюсь, спецификатор out говорит сам за себя.
Угу. Это потому, что отправитель может быть любой. А вот с портом так не получится, т.к. сокет еще при создании настраивается на работу по определенному порту при помощи bind. И уж точно данные придут именно на тот порт куда их отсылали.

to INTAARI:
Вы про таймаут? Так ведь если Вы используете IdUDPServer, то там есть обработчик OnUDPRead, который предоставит Вам не только уже считанные в поток данные, но и информацию о том, откуда они пришли. А чтобы было меньше тормозов основного потока приложения, используйте TIdAntifreeze или выносите сетевой обмен в отдельный поток.


 
Бред+   (2003-07-02 18:50) [12]

tcp out подключить сначала надо. Особые протоколы юзаете !!! Бред


 
Digitman ©   (2003-07-03 08:35) [13]


> vuk


вот в out-параметр в дан.случае и будет записана инф-ция об отправителе - IP+порт отправителя.



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

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

Наверх




Память: 0.5 MB
Время: 0.052 c
6-24588
Skywalker
2003-07-03 15:14
2003.09.08
Как получить физический путь к root сайта


4-24744
Shluz
2003-07-02 12:24
2003.09.08
wm_SetText


6-24574
sasha1
2003-07-03 15:42
2003.09.08
Net


14-24637
Карелин Артем
2003-08-20 15:35
2003.09.08
Посоветуйте персональный FireWall.


6-24609
gedd
2003-06-18 08:10
2003.09.08
Перекодировка темы письма в POP3