Форум: "Сети";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
ВнизНе удается прочитать строку из сети протоколом 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c