![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
UDPSocket [D6, Win95/98, WinXP]
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]
Так ни кто и не поможет?