Code Schnipsel Netzwerk

  • Netzwerk verbunden?


    Zitat von 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
    function IsNetworkConnected: Boolean;        begin   if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then     Result := True          else     Result := False; end;


    IP-Adresse eines Hosts ermitteln


    Zitat von 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
    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;




    Zitat von Icewarez

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


    Code
    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
    procedure TfrmServer.FormCreate(Sender: TObject);begin  ServerSocket.Port := 23; //Festlegung des Ports  ServerSocket.active := true; //Aktivierung der ServerSocketend;


    Client:


    Code
    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;


    Zitat von 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
    procedure TfrmClient.Button1Click(Sender: TObject);begin  if ClientSocket1.Active then    ClientSocket1.Socket.SendText('Hallo Server');end;


    Zitat von Icewarez

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


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


    Zitat von Icewarez

    Der empfangene Text wird in einem Memo ausgegeben.


    Antworten


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


    Zitat von Icewarez

    Verbindung trennen


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


    Server:


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


    Zitat von Icewarez

    Client:


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