Code Schnipsel Netzwerk

  • Netzwerk verbunden?


    Quote from Icewarez

    Feststellen, ob mein Computer mit dem Netzwerk verbunden ist


    Mit dieser Funktion l?sst sich ganz einfach feststellen, ob Dein Computer mit dem Netzwerk
    verbunden ist.


    Code
    1. function IsNetworkConnected: Boolean; begin if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then Result := True else Result := False; end;


    IP-Adresse eines Hosts ermitteln


    Quote from Icewarez

    Folgende Procedure ermittelt die IP-Adressen eines Hosts. Dies kann z.B. ein Copmutername oder ein Domain-Name sein.


    Kern der Funktion ist der Aufruf von "getHostByName", die in der "Platform SDK: Windows Sockets 2" dokumentiert ist. Dort finden sich auch relevante Fehlercodes, die die Funktion in Falle eines Fehlers zur?ckgibt.



    Code
    1. uses WinSock;function GetIpAddressByName(const Lines:TStrings; const AHost: String): Boolean;type PPInAddr= ^PInAddr;var WSA: TWSAData; HostInfo: PHostEnt; Addr: PPInAddr;begin Result:=False; if WSAStartUp($101, WSA) = 0 then begin try HostInfo:= getHostByName(PChar(AHost)); Result:=HostInfo<>nil; if Result then begin Addr:=Pointer(HostInfo^.h_addr_list); if (Addr<>nil) AND (Addr^<>nil) then begin Repeat Lines.Add(StrPas(inet_ntoa(Addr^^)) ) ; inc(Addr); Until Addr^=nil; end; end; finally WSACleanup; end; end;end;




    Quote from Icewarez

    Die Funktion gibt True zur?ck, falls der Aufruf von getHostByName erfolgreich war:


    Code
    1. procedure TForm1.Button1Click(Sender: TObject);begin if GetIpAddressByName(Listbox1.Items, 'www.google.de') then Showmessage('OK') else ShowMessage('Fehler');end;



    Daten zwischen zwei Rechnern austauschen




    Code
    1. procedure TfrmServer.FormCreate(Sender: TObject);begin ServerSocket.Port := 23; //Festlegung des Ports ServerSocket.active := true; //Aktivierung der ServerSocketend;


    Client:


    Code
    1. procedure TfrmClient.FormCreate(Sender: TObject);begin ClientSocket1.Port := 23; //Festlegung des Ports ClientSocket1.Host := '127.0.0.1'; //IP des Zielrechners ClientSocket1.active := true; //Aufbau der Verbindungend;


    Quote from Icewarez

    Beim Server kann man den Port frei festlegen (sofern er nicht schon von anderen Programmen genutzt wird und mit der Obergrenze von ca. 65000); der Client muss als Host die Adresse des Rechners, auf dem das Serverprogramm l?uft, angeben (127.0.0.1 f?r den lokalen Rechner) und den Port, der vom Server abgeh?rt wird.
    Der Server l?uft, der Client versucht, Kontakt zu ihm aufzunehmen. Der Server wartet bis er eine Nachricht erh?lt.


    Nachricht senden


    Client: Wir setzen auf das Client-Fenster einen Button. Ein Klick darauf soll einen Text an den Server schicken:


    Code
    1. procedure TfrmClient.Button1Click(Sender: TObject);begin if ClientSocket1.Active then ClientSocket1.Socket.SendText('Hallo Server');end;


    Quote from Icewarez

    Server: Im Server m?ssen wir eine Ereignisbehandlungsroutine daf?r implementieren (OnClientRead von TServerSocket):


    Code
    1. procedure TfrmServer.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);begin Memo1.Lines.Add(Socket.ReceiveText);end;


    Quote from Icewarez

    Der empfangene Text wird in einem Memo ausgegeben.


    Antworten


    Code
    1. Der Server antwortet: ServerSocket1.Socket.Connections[0].SendText('Hallo zur?ck');


    Quote from Icewarez

    Verbindung trennen


    Werden die Anwendungen geschlossen, sollte die Verbindung wieder getrennt werden:


    Server:


    Code
    1. procedure TfrmServer.FormClose(Sender: TObject; var Action: TCloseAction);begin ServerSocket.active:=false;end;


    Quote from Icewarez

    Client:


    Code
    1. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    2. begin
    3. ClientSocket1.Active:=false;
    4. end;