Delphi -> BCB4
-
Hi,
könnte jemand das hier mal für den BCB übersetzten (Ich weiß auch das der BCB Delphi unterstützt, aber hier findet er WSocket und WSocketS nicht):unit NetFind; interface uses Windows, Classes, SysUtils, ExtCtrls, WSocket, WSocketS, WinSock; type TFoundEvent = Procedure(Sender:TObject;Client:TWSocket;FromIP,FromPCName,Data:String) of object; TRequestEvent = Procedure(Sender:TObject;Client:TWSocket;FromIP,FromPCName,Data:String; var Answer: string) of object; TFoundDoneEvent = Procedure(Sender:TObject) of object; RClients = Record IP :String; Name :String; Answer:String; end; TNetFind = class(TComponent) private { Private-Deklarationen } protected FActive:Boolean; FPort:String; FLocalPCName:String; FTimeout:DWord; FTimer:TTimer; FTagStr:String; SocketServer:TWSocketServer; FOnClientFound : TFoundEvent; FOnRequest: TRequestEvent; FFoundDoneEvent: TFoundDoneEvent; procedure SocketServerDataAvailable(Sender: TObject; Error: Word); procedure SetActive(Value:Boolean); procedure SetPCName(Default:String); function ExtractPCName(var Source:String):String; procedure TimerTimeout(Sender: TObject); public ClientList: Array of RClients; procedure Find(InitMessage:String); published constructor Create(AOwner:TComponent); override; destructor Destroy; override; property TagStr:String read FTagStr write FTagStr; property Active:Boolean read FActive write SetActive; property Port:String read FPort write FPort; property LocalPCName:String read FLocalPCName; property FindTimeout: DWord read FTimeout write FTimeout default 3000; property OnClientFound:TFoundEvent read FOnClientFound write FOnClientFound; property OnRequest: TRequestEvent read FOnRequest write FOnRequest; property OnFoundDone: TFoundDoneEvent read FFoundDoneEvent write FFoundDoneEvent; end; procedure Register; implementation const IsRequest = #17; IsAnswer = #20; Delimiter = '|'; procedure Register; begin RegisterComponents('FPiette', [TNetFind]); end; constructor TNetFind.Create(AOwner:TComponent); begin inherited Create(AOwner); if not (csDesigning in ComponentState) then begin SocketServer := TWSocketServer.Create(self); SocketServer.Proto := 'udp'; SocketServer.OnDataAvailable := SocketServerDataAvailable; FTimer := TTimer.Create(Self); FTimer.Enabled := false; FTimer.OnTimer := TimerTimeout; end; FPort := '2899'; FindTimeout := 3000; SetPCName('netfindpc'); SetLength(ClientList,0); end; destructor TNetFind.Destroy; begin Try If Assigned(SocketServer) then SocketServer.Free; If Assigned(FTimer) then FTimer.Free; SetLength(ClientList,0); Except End; inherited destroy; end; procedure TNetFind.SetPCName(Default:String); var ComputerName : PChar; NameSize : DWORD; begin Try If Default<>'' then FLocalPCName := Default; ComputerName := #0; NameSize := MAX_COMPUTERNAME_LENGTH + 1; try GetMem(ComputerName, NameSize); Windows.GetComputerName(ComputerName, NameSize); If Trim(StrPas(ComputerName))<>'' then FLocalPCName:= StrPas(ComputerName); finally FreeMem(ComputerName); end; Except End; end; function TNetFind.ExtractPCName(var Source:String):String; begin Result := ''; If Source='' then exit; Result := Copy(Source,0,Pos(Delimiter,Source)-1); Source := Copy(Source,Pos(Delimiter,Source)+1,Length(Source)); end; procedure TNetFind.TimerTimeout(Sender: TObject); begin FTimer.Enabled := false; If Assigned(FFoundDoneEvent) then FFoundDoneEvent(Self); End; procedure TNetFind.SetActive(Value:Boolean); begin If not Assigned(SocketServer) then exit; If Value<>FActive then begin If Value then begin SocketServer.Addr := '0.0.0.0'; SocketServer.Port := FPort; end; If Value then SocketServer.Listen Else SocketServer.Close; FActive := Value; end; end; procedure TNetFind.Find(InitMessage:String); var TempSocket:TWSocket; begin SetLength(ClientList,0); If not Assigned(SocketServer) then exit; Try If (FLocalPCName='') then SetPCName('netfindpc'); TempSocket := TWSocket.Create(Self); TempSocket.Proto := 'udp'; TempSocket.Addr := '255.255.255.255'; TempSocket.Port := FPort; TempSocket.LocalAddr := '0.0.0.0'; TempSocket.Connect; TempSocket.SendStr(IsRequest+FLocalPCName+Delimiter+InitMessage); TempSocket.Close; TempSocket.Free; If FTimeout>0 then begin FTimer.Interval := FTimeout; FTimer.Enabled := true; End else FTimer.Enabled := false; Except end; end; procedure TNetFind.SocketServerDataAvailable(Sender: TObject; Error: Word); var Buffer : array [0..1023] of char; Len : Integer; Src : TSockAddrIn; SrcLen : Integer; Client : TWSocket; FromIP, FromPCName, Data, DataToSend:String; TempSocket:TWSocket; DoAnswer:Boolean; begin If Error<>0 then exit; Try Client := TWSocket(Sender); SrcLen := SizeOf(Src); Len := Client.ReceiveFrom(@Buffer, SizeOf(Buffer), Src, SrcLen); If (Len>0) then begin FromIP := StrPas(inet_ntoa(Src.sin_addr)); Data := Copy(StrPas(Buffer),1,Len); DoAnswer := (Data[1]=IsRequest); Data := Copy(Data,2,Length(Data)); If Pos(Delimiter,Data)>0 then FromPCName := ExtractPCName(Data) else FromPCName := ''; DataToSend := 'Hello to '+FromIP; { It's an answer to our request ... } If not DoAnswer then begin SetLength(ClientList,Length(ClientList)+1); ClientList[Length(ClientList)-1].IP := FromIP; ClientList[Length(ClientList)-1].Name := FromPCName; ClientList[Length(ClientList)-1].Answer:= Data; If Assigned(FOnClientFound) then FOnClientFound(Self,Client,FromIP,FromPCName,Data); { We received a request, answer ... } end else If ((DataToSend<>'') and (FromPCName<>FLocalPCName)) then begin DataToSend := ''; If Assigned(FOnRequest) then FOnRequest(Self,Client,FromIP,FromPCName,Data,DataToSend); TempSocket := TWSocket.Create(Self); TempSocket.Proto := 'udp'; TempSocket.Addr := FromIP; TempSocket.Port := FPort; TempSocket.LocalAddr := '0.0.0.0'; TempSocket.Connect; TempSocket.SendStr(IsAnswer+FLocalPCName+Delimiter+DataToSend); TempSocket.Close; TempSocket.Free; End; End; Except End; end; end.
Danke
Alexander Sulfrian
-
hallo,
für 100 euro übersetz ichs dir...
murph
-
Hey, keine Dumpingpreise!
Ab jetzt aber bitte nur noch "ernstgemeinte Zuschriften". Dass die Bitte von A.S. reichlich unverschämt ist weiss er sicher selbst. Zumal es ja im Grunde noch nicht mal eine Bitte ist ...
-
Hi,
ja irgenwie wusste ich selber, dass das keiner macht (naja versuchen kann man's ja mal)! Naja jedenfalls hab ich mir die mühe gamacht und in den unendlichen weiten des Internets nach WSocket und WSocketS gesucht und siehe da, hab sie auch in einer Komponentensammlung gefunden! (hier)Trotzdem danke!
Alexander Sulfrian
PS: Is 100€ nich ein weinig viel?