Witam
ściągnąłem źródło klienta i serwera do wysyłania Broadcastu na wspomniany serwer.
Używam komponentów idUDPServer i idUDPClient.
KLIENT:
//procedura pobierająca adres IP
function GetIP:String;
var p:PHostEnt;
s:array[0..128] of char;
p2:pchar;
begin
GetHostName(@s, 128);
p := GetHostByName(@s);
p2 := Pchar(iNet_ntoa(PInAddr(p^.h_addr_list^)^));
Result:=String(p2);
end;
//procedura "pisząca adres" BROADCASTU
function Broadcasting:String;
var s,s2:String;
begin
s:=GetIP;
s2:='';
s2:=s2+copy(s,1,Pos('.',s));
delete(s,1,Pos('.',s));
s2:=s2+copy(s,1,Pos('.',s));
delete(s,1,Pos('.',s));
s2:=s2+copy(s,1,Pos('.',s));
delete(s,1,Pos('.',s));
s2:=s2+'255';
Result:=s2;
end;
//wyslij tekst do wszystkich w sieci
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
udp.Host:=BroadCasting; //pobierz Adres Broadcastu i zapisz do komponentu
udp.Broadcast(edit1.Text,1234) //wyslij tekst z edita dopisując 'by BROADCAST :=)'
end;
SERWER:
procedure TForm1.udpUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
buff:Array[0..4096] of Char;
begin
AData.Read(buff,SizeOf(buff)); //odebrane dane przydziel do bufora
Memo1.Lines.Add(String(buff)); //do memo1 zapisz dane z bufora
end;
W czym problem?
Gdy wysyłam wiadomość to odbieram ją wraż z kawałkiem ostatniej wiadomości lub z jakimiś krzaczkami i nie wiem jak tego się pozbyć, aby czysta wiadomość dochodziła, taka jaką wysyłam z Edit na kliencie.
Może coś z tym bufferem nie tak? Może go trzeba jakoś zwalniać/czyścić po odczycie?
Co tu jest źle? Dzięki za odpowiedzi. :)