Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
6-11696
Elisa
2003-10-10 14:00
2003.12.04
при использовании NMHTTP выдает ошибку


4-11719
MegaBass
2003-10-09 14:26
2003.12.04
Спец функции API


4-11707
vova_d
2003-10-10 18:07
2003.12.04
TThread CreateWindow and DestroyWindow


4-11712
SergeySEM
2003-10-10 12:59
2003.12.04
вылов клавиш


6-11666
Ahmad K
2003-10-05 15:04
2003.12.04
Работа в паутине.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский