Moin Leute,
ich hab eben ein neues Projekt angefangen und schon ein Problem, wo ich wohl mal wieder auf dem Schlauch steh:
Ich hab einen UDPServer und einen UDPClient, jeweils in unterschiedlichen Progs in einem Thread. Der Client sendet nun einen Broadcast auf einem bestimmten Port und wartet auf eine Antwort:
Delphi-Quellcode:
//locate server via UDP-Broadcast
FIdUdpClient.Port:=19000;
FIdUdpClient.Active:=true;
FIdUdpClient.Broadcast(UDP_SRVLOC_REQ,UDP_COMM_PORT);
resp := FIdUdpClient.ReceiveString(UDP_REC_TIMEOUT);
if resp <> '' then begin
//Server found
ind := PosEx('=',resp);
resp := Copy(resp,ind+1,Length(resp)-ind);
//execute event
if Assigned(FOnSWServerFound) then
OnSWServerFound(resp);
end;
Der Server empfängt den Broadcast und soll darauf antworten:
Delphi-Quellcode:
procedure TSWUdpServer.Execute;
var inctext, clientip: String;
clientport: Integer;
begin
FIdUdpServer.BroadcastEnabled := true;
FIdUdpServer.DefaultPort := UDP_COMM_PORT;
FIdUdpServer.Active := true;
while not Terminated do begin
FIdUdpServer.ReceiveString(clientip,clientport,UDP_REC_TIMEOUT);
if inctext = UDP_SRVLOC_REQ then
ResponseToSRVLOCREQ(clientip);
end;
{ Thread-Code hier einfügen }
end;
//==================== Send response to server-locate-request ==================
procedure TSWUdpServer.ResponseToSRVLOCREQ(clientip: String);
begin
FIdUdpServer.Send(clientip,UDP_COMM_PORT,UDP_SRVLOC_RSP+GetLocalIps.Strings[0]);
end;
UDP_REC_TIMEOUT ist auf 2000 eingestellt. Das Phänomen ist nun, dass der Server das Paket korrekt empfängt und darauf reagiert, d.h. die Prozedur ResponseToSRVLOCREQ wird ausgeführt und dort sollte ja eigentlich auch ein UDP-Paket an den Client geschickt werden. Nur kommt nix raus, mit Ethereal hab ich das mal gecheckt, es wird kein Paket gesendet...