Форум: "Сети";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
ВнизUDPSocket Найти похожие ветки
← →
mOOx_ (2003-09-14 15:38) [0]Такой вопрос: хочу с помощью сабж посылать сообщения на удаленные машины. На них, соответственно, тоже будет стоять клиент. Но вот что мешает: если я указываю RemoteHost=<имя уд. машины или ее IP>, то сообщение не доходит (даже если я указываю 127.0.0.1). На OnReceive весит обычный ShowMessage. В качестве порта использую свой, который прописан в services. В чем дело?
← →
mOOx_ (2003-09-23 19:27) [1]Так ни кто и не поможет?
← →
BillyJeans (2003-09-24 11:36) [2]а в каких случаях сообщение доходит???
← →
mOOx_ (2003-09-25 16:13) [3]Если бы оно доходило хоть в каких-нибуть случаях, то я бы и не спашивал :). Оно вообще не доходит.
← →
Ketmar (2003-09-25 19:28) [4]17-я строка виновата.
← →
mOOx_ (2003-09-26 16:48) [5]procedure TForm1.Button1Click(Sender: TObject);
var
Mess: string[10];
Size: integer;
begin
UDPSocket1.LocalHost:=LabeledEdit1.Text;
UDPSocket1.LocalPort:=LabeledEdit2.Text;
UDPSocket1.RemoteHost:=LabeledEdit3.Text;
UDPSocket1.RemotePort:=LabeledEdit4.Text;
UDPSocket1.Active:=true;
Mess:=LabeledEdit5.Text;
Size:=length(Mess);
UDPSocket1.SendBuf(Mess,Size);
end;
procedure TForm1.UdpSocket1Receive(Sender: TObject; Buf: PChar;
var DataLen: Integer);
begin
ShowMessage(string(Buf));
end;
И чо? То же и на клиенте функционирует.
← →
BillyJeans (2003-09-27 13:36) [6]хм... а где же прием сообщения???
← →
mOOx_ (2003-09-27 13:47) [7]Я так понимаю, что OnReceive происходит, когда текст уже пришел и его осталось только использовать. Тут что, ReceiveBuf не хватает?
← →
BillyJeans (2003-09-27 14:01) [8]а как насчет вызова Receive?
← →
MaxDDinc (2003-09-27 15:39) [9]// Отправка
procedure TForm1.Button1Click(Sender: TObject);
var
MyStream: TMemoryStream;
TmpStr: String;
Begin
NMUDP1.ReportLevel := Status_Basic;
NMUDP1.RemoteHost := Edit1.Text;
NMUDP1.RemotePort := StrToInt(Edit2.Text);
TmpStr := Edit3.Text;
MyStream := TMemoryStream.Create;
try
MyStream.Write(TmpStr[1], Length(Edit3.Text));
NMUDP1.SendStream(MyStream);
finally
MyStream.Free;
end;
end;
// Прием
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
begin
MyStream := TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
Memo1.Lines.Add(FromIP+": "+TmpStr);
finally
MyStream.Free;
end;
end;
И немного из жизни:
UDP не работает, если у тебя нет физической линии и она не подключена к HUB или SWITCH
Передача идет реально по линии, а не так как TCP
Удачи ...
← →
Yol (2003-09-27 21:25) [10]Если у тебя UDP(Indy) зайди на
http://www.nevrona.com/indy там есть demos.
← →
mOOx_ (2003-09-28 14:44) [11]Большое спасибо за помощь :). Только я один момент не понял:"...если у тебя нет физической линии..." - это вообще как? Беспроводная связь что-ли?
← →
mOOx_ (2003-09-28 15:02) [12]2MaxDDinc: у тебя в примерах везде NMUDP1. Это с какой закладки компонент?
Вопрос ко всем: я использую компонент с закладки Internet. Чем он отличается от одноименного Indy и от NM..?
← →
mOOx_ (2003-09-28 15:07) [13]Нашел, от куда :). Так всетаки, я нашел челых 3 компонента UDP! В чем их отличия?
← →
mOOx_ (2003-09-28 15:24) [14]Сделал по примеру [9].
NMUDP1.ReadStream(MyStream);
-> ...Stream write error...
Вообще не воспринимаю :(. Видно удача ко мне задом повернулась :). Опять помощи прошу. Если ща я хоть понял, как отсылать и принимать, то на этой строке вообще ничего не понимаю. Может поток еще не дошел. Прием прямо на этой же машине. IP хоть из сетки, хоть 127.0.0.1 - все одно. Вроде с потоком все так. Вообщем...ХЕЛП!!!
← →
MaxDDinc (2003-09-28 16:53) [15]Извини, я про 5-ый Delphi говорил, но в шестом, помоему отличий немного ... хотя, говоришь, нашел UDP, тогда к делу:
Физическая линия - кабель UTP CAT.5. Он должен быть подключен к хабу, так как сигнал по UDP отправляется фактически в линию и если ты не подключен, то сетевая карта никогда его не получит!!!
Выбирай компонент, который содержит следующие события:
- OnBufferInvzlid;
- OnDataReceived;
- OnDataSend;
- OnInvalidHost;
- OnStatus;
- OnStreamInvalid.
В юзес у меня следующие вещи
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, NMUDP, ExtCtrls;
Проверь, возможно чего-то не хватает ...
Но я это на 5-ом делал, так что всех подвохов, которые могут быть использованы в 6-ом не знаю ...
Пробуй, посмотрим :)
← →
Е-Моё имя (2003-09-28 20:18) [16]
> Физическая линия - кабель UTP CAT.5
а если STP и не дай бох не 5-я категория, то это уже не физическая линия! метафизическая ;))
← →
mOOx_ (2003-09-29 14:25) [17]Я вот что подумал: а может быть трабл в том, что я отправляю на свой же комп по порту 999 и из него же принимаю на этой же машине? Тоесть, поток приходит в порт, который в данный момент занят отправкой. Может как-нибуть так :).
← →
MaxDDinc (2003-09-29 18:36) [18]>> Е-Моё имя © (28.09.03 20:18) [16]
Это к примеру было, острица :))
← →
MaxDDinc (2003-09-29 18:37) [19]Определи номер порта где-то после 2040, у меня все работает ...
Ты кабель проверил? Хаб включен?
← →
mOOx_ (2003-10-02 16:26) [20]Все работает (в смысле хабов). К тому же если я указываю 127.0.0.1, то хаб вообще не причем. У меня порт 999. MaxDDinc, объясни, пожалуйста, зачем порт после 2040 задавать? Тут что, хитрость какая есть?
← →
MaxDDinc (2003-10-02 16:47) [21]Ну-у-у, блин-н-н, приплыли ...
Давай попорядку:
- проверь IP адрес своей сетевухи, он вообще выставлен ?
- с адресом не мудри, задай для начала 192.168.0.1 (для примера);
- порт можно задавать любой в пределах 0..65535 (так в книге написано, но я не работаю выше 5000);
- задал 2040, потому что в левом ухе в этот момент зачесалось :) (объяснил выше);
Вот теперь, если не работает, то отправь мне свой модуль или вырезку (прм/прд), посмотрю, что ты там назадавал ...
Спрашивай, чем могем, помогем :)
← →
Yol (2003-10-02 17:09) [22]Блин, если послушал бы меня и зашел на
http://www.nevronacom/indy, и скачал indy(demos)(примеры на дорогой вкус) да еще и сам Іndy, если хочешь более новую версию,
то проблем никаких не имел бы.
← →
mOOx_ (2003-10-02 17:45) [23]2MaxDDinc
Код, собственно, см. [9] :). Только еще LocalPort задаю. Завел в Services порт 2080 для отправки и 2081 для приема. Все равно этот дурацкий ексепшн. Мне кажется, что тут дело уже не в сети, а с портами (OnReceive веть выполняется). IP сетевухи прописаный. Все настроено и сетка работает (сегодня тока что-то не работает сеть, по тому и эспериментирую с адресами типа 127...). Кстати, 192.168.0.1 не доходит. Да, такой вопрос: у тебя работает между удаленными машимами? Локально через 127.. все тоже работоспособно?
2Yol
Ссылка не рабочая :(. К тому же, я уже спрашивал, выбор компонента - это дело вкуса или все же есть принципиальные отличия?
← →
Yol (2003-10-02 20:50) [24]Извени я перепутал--- http://www.indyproject.org/
← →
MaxDDinc (2003-10-03 20:16) [25]Ну ты ... меня удивляешь ....
Ну если ты отправляешь на порт 2080, то и принимаешь на порт 2080 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Как ты можешь принять на 2081, если на него ничего не отправлял ??????????????????
Словей уже нет :))
← →
mOOx_ (2003-10-04 11:42) [26]Слушай, а веть действительно %). Похоже запарился с этой темой. Так веть ексепшн и при посылке и приеме на один и тот же порт возникает :(. Ты по [23] ответь, может хоть что-то проясниться. Больше постораюсь не делать таких ... кхе-кхе... ошибок :)
← →
MaxDDinc (2003-10-04 22:15) [27]Возможно в 6-ом Delphi компонент UDP как-то отличается ... :(
Попробуй запустить два приложения, в одном порты распределить так:
- 2080 = прием, 2081 = передача;
а в другом наоборот
Возможно локально на один и тот же порт отправка вызывает ошибку
Попробуй, ждемс ответа ????
И чего это все на 6-ой перешли, чем пятый был плох, вот я на 5-ом пишу и нормально ...
← →
mOOx_ (2003-10-05 11:08) [28]Слухай, MaxDDinc, ты гениален! Все отправляется :). Теперь только пичесать и ВСЕ. БОЛЬШОЕ СПАСИБО. А почему я не мог в таком случае принимать сообщения в этом же приложении?
ЗЫ: теперь можно обсуждать эту тему, так как душа моя успакоилась :)
← →
MaxDDinc (2003-10-06 15:44) [29]Всегда пожалуйста :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.004 c