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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.01 c
6-11682
adv
2003-10-03 13:56
2003.12.04
ClientSocket в Com объекте - срочно Help


3-11594
Bart
2003-11-15 19:21
2003.12.04
GUID в MYSQL


6-11665
Serhij H.
2003-10-08 10:36
2003.12.04
Сообщение по локальной сети (Novell)


6-11658
Геннадий
2003-10-08 12:43
2003.12.04
Как программно изменить настройки TCP/IP (в частности, IP-адрес)?


4-11731
KADAN
2003-10-07 21:29
2003.12.04
Shut down the computer (2k, XP)