AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Client - Server über Internet
Thema durchsuchen
Ansicht
Themen-Optionen

Client - Server über Internet

Ein Thema von Cordt · begonnen am 28. Jul 2013 · letzter Beitrag vom 29. Jul 2013
 
Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#1

Client - Server über Internet

  Alt 28. Jul 2013, 21:57
Hi Leute,

ich versuche schon seit einer ganzen weile und einiges an Google und DP-suchaufwand ein kleines client-serversystem aufzubaun.

Ich habe mich mit diversen tutors rumgeschlagen, jedoch habe ich nur bei den standard-komponenten [TClientSocket;TServerSocket] "erfolg" gehabt.
Indy und 3.anbieterkomponenten konnte ich nichteinmal im LAN zu einer verbindung bringen.

der folgende Quelltext kommt zu einer Verbindung, wenn ich die Lokale Server-IP übergebe. Nicht aber wenn ich die Router-IP, sprich meine Internet-IP übergebe. das habe ich auch ausserhalb dieses netzwerks getestet.
Intern bekomm ich eine Zeitüberschreitung (Socketfehlercode 10060) extern weist mein system offensichtlich den versuch zurück (10061).

Windowsfirewall hat entsprechende Ports freigegeben(ein und ausgehend, auf beiden hier getesteten systemen) und wurde zusätzlich deaktiviert.
Richtige Firewalls wurden deaktiviert.
Router hat ne Portweiterleitung auf entsprechendem Port auf die lokale IP meines "servers"
IP und Port sind festgelegt und mehrfach geprüft.
Andere Ports wurden getestet.

Könnt Ihr mir sagen woran ich scheitere?


Server
Delphi-Quellcode:
{Komponenten: ein Button, ein Memo}

procedure TMainForm.Button1Click(Sender: TObject);
begin
  FServerSocket.Active:= not FServerSocket.Active;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  FServerSocket:= TServerSocket.Create(Self);
  FServerSocket.OnClientRead:= ServerOnClientRead;
  FServerSocket.OnClientWrite:= ServerOnClientWrite;
  FServerSocket.OnClientError:= ServerOnClientError;
  FServerSocket.OnClientConnect:= ServerOnClientConnect;
  FServerSocket.OnClientDisconnect:= ServerOnClientDisconnect;
  FServerSocket.Port:= 8521;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  FServerSocket.Free;
end;

procedure TMainForm.ServerOnClientRead(Sender: TObject; Server: TCustomWinSocket);
var
  pBuf : PAnsiChar;
  nLen : Integer;
  szReceivedtext: String;
begin
  {$IFDEF UNICODE}
  nLen:= Server.ReceiveLength;
  if nLen <= 0 then
     Exit;
  pBuf:= AnsiStrAlloc(nLen);
  try
    nLen:= Server.ReceiveBuf(pBuf^, nLen);
    SetString(szReceivedtext, pBuf, nLen);
  finally
    StrDispose(pBuf);
  end;

  {$ELSE}
  szReceivedText:= Server.ReceiveText;
  {$ENDIF UNICODE}

  Memo1.Lines.Add(szReceivedText);
end;

procedure TMainForm.ServerOnClientConnect(Sender: TObject; Server: TCustomWinSocket);
begin
  Memo1.Lines.Add('Client ('+Server.RemoteAddress+') connected.');
  Server.SendText('Welcome to Server '+Server.LocalHost);
end;

procedure TMainForm.ServerOnClientDisconnect(Sender: TObject; Server: TCustomWinSocket);
begin
  Memo1.Lines.Add('Client ('+Server.RemoteHost+') disconnected.');
end;

end.

Client
Delphi-Quellcode:
{Komponenten: ein Button, ein Memo}

procedure TMainForm.Button1Click(Sender: TObject);
begin
  FClientSocket.Active:= not FClientSocket.Active;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  FClientSocket:= TClientSocket.Create(Self);
  FClientSocket.Port:= 8521;
  FClientSocket.Address:= {hier steht die Internet-IP meines Routers}
  FClientSocket.OnLookup:= ClientOnLookup;
  FClientSocket.OnConnecting:= ClientOnConnecting;
  FClientSocket.OnConnect:= ClientOnConnect;
  FClientSocket.OnDisconnect:= ClientOnDisconnect;
  FClientSocket.OnRead:= ClientOnRead;
  FClientSocket.OnWrite:= ClientOnWrite;
  FClientSocket.OnError:= ClientOnError;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  FClientSocket.Free;
end;

procedure TMainForm.ClientOnRead(Sender: TObject; Server: TCustomWinSocket);
var
  pBuf : PAnsiChar;
  nLen : Integer;
  szReceivedtext: String;
begin
  {$IFDEF UNICODE}
  nLen:= Server.ReceiveLength;
  if nLen <= 0 then
     Exit;
  pBuf:= AnsiStrAlloc(nLen);
  try
    nLen:= Server.ReceiveBuf(pBuf^, nLen);
    SetString(szReceivedtext, pBuf, nLen);
  finally
    StrDispose(pBuf);
  end;
  {$ELSE}
  szReceivedText:= Server.ReceiveText;
  {$ENDIF UNICODE}

  Memo1.Lines.Add(szReceivedText);

end;


procedure TMainForm.ClientOnConnect(Sender: TObject; Server: TCustomWinSocket);
begin
  Server.SendText('Hello from '+ Server.LocalAddress);
end;

procedure TMainForm.ClientOnDisconnect(Sender: TObject; Server: TCustomWinSocket);
begin
  Server.SendText('Bye');
end;

end.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz