Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

UDPSocket [D6, Win95/98, WinXP]


Страницы:   1 2

mOOx_ ©   (2003-09-14 15:38:00) 

Такой вопрос: хочу с помощью сабж посылать сообщения на удаленные машины. На них, соответственно, тоже будет стоять клиент. Но вот что мешает: если я указываю RemoteHost=<имя уд. машины или ее IP>, то сообщение не доходит (даже если я указываю 127.0.0.1). На OnReceive весит обычный ShowMessage. В качестве порта использую свой, который прописан в services. В чем дело?


MaxDDinc   (2003-09-27 15:39:00) [21]

// Отправка
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

Удачи ...


BillyJeans   (2003-09-27 14:01:00) [22]

а как насчет вызова Receive?


mOOx_   (2003-09-27 13:47:00) [23]

Я так понимаю, что OnReceive происходит, когда текст уже пришел и его осталось только использовать. Тут что, ReceiveBuf не хватает?


BillyJeans   (2003-09-27 13:36:00) [24]

хм... а где же прием сообщения???


mOOx_   (2003-09-26 16:48:00) [25]

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;

И чо? То же и на клиенте функционирует.


Ketmar   (2003-09-25 19:28:00) [26]

17-я строка виновата.


mOOx_   (2003-09-25 16:13:00) [27]

Если бы оно доходило хоть в каких-нибуть случаях, то я бы и не спашивал :). Оно вообще не доходит.


BillyJeans   (2003-09-24 11:36:00) [28]

а в каких случаях сообщение доходит???


mOOx_   (2003-09-23 19:27:00) [29]

Так ни кто и не поможет?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо