Size: a a a

2020 April 13

AS

Alexey Shumkin in Delphi & Lazarus
Garik
ты на инди бродкаст отправь и поймай свой, а не чужой
+
источник

G

Garik in Delphi & Lazarus
а то вдруг ты не на том порту ловишь, может его через htons надо)
источник

AS

Alexey Shumkin in Delphi & Lazarus
Garik
а то вдруг ты не на том порту ловишь, может его через htons надо)
ну, он же инди юзает, там всё ок
источник

S

Serjone in Delphi & Lazarus
Garik
ты на инди бродкаст отправь и поймай свой, а не чужой
Не ловит
источник

S

Serjone in Delphi & Lazarus
источник

G

Garik in Delphi & Lazarus
а че порт другой?
источник

S

Serjone in Delphi & Lazarus
Garik
а че порт другой?
у меня броадкаст на этом порту из соседнего идудпсервера идёт
источник

G

Garik in Delphi & Lazarus
и ThreadEvent мб в True поставить?
источник

S

Serjone in Delphi & Lazarus
Garik
и ThreadEvent мб в True поставить?
прога не стартует тогда . Висит в процессах и не запускается
источник

G

Garik in Delphi & Lazarus
заюзал бы winsock и не парился)
источник

S

Serjone in Delphi & Lazarus
Garik
заюзал бы winsock и не парился)
это как?
источник

S

Serjone in Delphi & Lazarus
они умеют в удп?
источник

DB

Dmitry Belkevich in Delphi & Lazarus
они у тебя и работают ) только что сверху инди довешена
источник

G

Garik in Delphi & Lazarus
это почти как у тебя сейчас только все ручками прописывается, инициализация, биндинг порта, опрос состояния, прием. более низкий уровень короче.
источник

SB

Sergey Bodrov in Delphi & Lazarus
object IdUDPServer: TIdUDPServer
   BufferSize = 32768
   Bindings = <>
   DefaultPort = 5000
   OnUDPRead = IdUDPServerUDPRead
   ThreadedEvent = True
   Left = 128
   Top = 212
 end
источник

SB

Sergey Bodrov in Delphi & Lazarus
procedure TMultiLineForm.IdUDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
 BytesCount: Integer;
 UDPPacket: TUDPPacketRec;
begin
 try
   BytesCount := AData.Size;
   if BytesCount > 0 then
   begin
     SetLength(UDPPacket.Data, BytesCount);
     AData.ReadBuffer(UDPPacket.Data[1], BytesCount);
     UDPPacket.PeerIP   := ABinding.PeerIP;
     UDPPacket.PeerPort := ABinding.PeerPort;
     UDPPacket.LocalIP  := ABinding.IP;
     UDPPacket.LocalPort := ABinding.Port;
     //UDPPacket.Channel := '';

     FUdpPacketQueueRx.Push(UDPPacket);
   end;
 except
   //Inc(CommStats.RxErrors);
   _LogError('IdUDPServerUDPRead(): ' + GetExceptionMessage());
 end;
end;
источник

SB

Sergey Bodrov in Delphi & Lazarus
Это старый вариант, есть новый, без Indy. Но там гораздо больше кода.
источник

S

Serjone in Delphi & Lazarus
Sergey Bodrov
Это старый вариант, есть новый, без Indy. Но там гораздо больше кода.
давай тоже, для общего развития
источник

S

Serjone in Delphi & Lazarus
Sergey Bodrov
procedure TMultiLineForm.IdUDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
 BytesCount: Integer;
 UDPPacket: TUDPPacketRec;
begin
 try
   BytesCount := AData.Size;
   if BytesCount > 0 then
   begin
     SetLength(UDPPacket.Data, BytesCount);
     AData.ReadBuffer(UDPPacket.Data[1], BytesCount);
     UDPPacket.PeerIP   := ABinding.PeerIP;
     UDPPacket.PeerPort := ABinding.PeerPort;
     UDPPacket.LocalIP  := ABinding.IP;
     UDPPacket.LocalPort := ABinding.Port;
     //UDPPacket.Channel := '';

     FUdpPacketQueueRx.Push(UDPPacket);
   end;
 except
   //Inc(CommStats.RxErrors);
   _LogError('IdUDPServerUDPRead(): ' + GetExceptionMessage());
 end;
end;
это, похоже старое инди. У меня не стрим приходит, а байты.
источник

SB

Sergey Bodrov in Delphi & Lazarus
источник