AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Router geht Offline, wie bekommt das ein ClientSocket mit ?
Thema durchsuchen
Ansicht
Themen-Optionen

Router geht Offline, wie bekommt das ein ClientSocket mit ?

Ein Thema von PeterP. · begonnen am 11. Dez 2004 · letzter Beitrag vom 14. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
PeterP.
(Gast)

n/a Beiträge
 
#1

Router geht Offline, wie bekommt das ein ClientSocket mit ?

  Alt 11. Dez 2004, 16:31
Hallo zusammen,

ich habe folgendes Problem:
Ich habe einen ClientSocket, der eine Verbindung zu einem Server ins Internet herstellt und Packete empfängt und sendet. (Ein simpler Chat)
Es klappt auch alles wunderbar, nur wenn man hinter einem Router ist und der die Verbindung nach einer bestimmten Zeit trennt, dann merkt der Client nichts davon. Und wenn man dann ein Packet mit dem Client sendet, dann baut der Router eine neue Verbindung auf und hat somit meist ja auch eine neue IP.
Hab schon versucht nach dem "send()" WSAGetLastError abzufangen, aber der bleibt auch bei 0.

Kann man das denn irgendwie prüfen, ohne daß der Router eine Verbindung aufbaut ?
Die Internet IP kann man ja auch schlecht hinter einem Router abfragen ohne eine Verbindung ins Internet zu erzwingen.

Bin für jede hilfreiche Idee dankbar.

Und nochwas:
Ich benutze nicht die Scktcmp Unit und auch keine Fenster nur eine Konsole.
Warum ?
Weil ein Freund von mir (C++ Programmierer) meinte, daß es mit Delphi nicht möglich sei einen Internet Chat Clienten kleiner als 200kb zu programmieren. Und sowas kann man ja nicht auf sich sitzen lassen.
Also versuch ich den so klein wie nur möglich zu bekommen und benutze die angehängte Socket Unit, in der ja nur ein Client sein muss.

Schöne Grüsse
PeterP.
Angehängte Dateien
Dateityp: pas socketunit.pas (3,2 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#2

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 11. Dez 2004, 16:57
Sollte man vielleicht die aktuelle WAN-IP abfragen?

Damit würde man es merken.

MFG
THomas
Sport ist mord...
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#3

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 11. Dez 2004, 17:03
Hallo Zusammen,
und da gab es noch das Ereignis "OnDisconnect" ...

Das schreibt die Delphi Hilfe dazu:
Das Ereignis OnDisconnect tritt auf Client-Sockets unmittelbar nach dem Schließen der Verbindung zum Server auf.

Delphi-Syntax:

property OnDisconnect: TSocketNotifyEvent;

C++ Syntax:

__property TSocketNotifyEvent OnDisconnect = {read=FOnDisconnect, write=FOnDisconnect};

Beschreibung

Schreiben Sie eine Ereignisbehandlungsroutine für OnDisconnect für den Client-Socket, damit nach dem Schließen der Verbindung zu einem Server-Socket spezielle Operationen ausgeführt werden.

bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
PeterP.
(Gast)

n/a Beiträge
 
#4

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 11. Dez 2004, 17:19
@thomasdrewermann
"Die Internet IP kann man ja auch schlecht hinter einem Router abfragen ohne eine Verbindung ins Internet zu erzwingen."


@Duffy
Also ungefähr so ? (Hab das mal getestet und funktioniert nicht)

Code:
type
 TSocketNotifyEvent = procedure (sender: TObject) of object;  // eingefügt

type
  TClientSocket = class(TObject)
  private
    FAddress: pchar;
    FConnected: boolean;
    FOnDisconnect: TSocketNotifyEvent;
  protected
    FSocket: TSocket;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Connect(Address: string; Port: integer);
    procedure Disconnect;

    function ReceiveBuffer(var Buffer; BufferSize: integer): integer;
    function ReceiveLength: integer;
    function SendBuffer(var Buffer; BufferSize: integer): integer;

    property Connected: boolean read FConnected;
    property Socket: TSocket read FSocket;
    property OnDisconnect: TSocketNotifyEvent read FOnDisconnect write FOnDisconnect; // eingefügt
  end;
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 11. Dez 2004, 17:21
Zitat von PeterP.:
Weil ein Freund von mir (C++ Programmierer) meinte, daß es mit Delphi nicht möglich sei einen Internet Chat Clienten kleiner als 200kb zu programmieren. Und sowas kann man ja nicht auf sich sitzen lassen.
Mhh. Dann solltest du mal nach nonVCL suchen. Damit kannst du auch Guis die kleiner als 200kb sind schreiben.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
PeterP.
(Gast)

n/a Beiträge
 
#6

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 11. Dez 2004, 17:27
@jim_raynor
Danke für den Tip, aber lies dir doch mal mein Posting durch und schau dir die SocketUnit von mir mal an. Dann wirst du merken, daß das ganze schon ohne VCL auskommt. Und somit ja schon non-VCL ist.
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#7

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 11. Dez 2004, 17:31
Dafür gehört zu seiner sehr kleinen C++ Anwendung auch immer noch die Runtime. Wenn man die mit eingrechnet, dann ist das Programm noch grosser als das selbe Programm in Delphi.

MFG
Thomas
Sport ist mord...
  Mit Zitat antworten Zitat
PeterP.
(Gast)

n/a Beiträge
 
#8

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 14. Dez 2004, 12:57
@Thomas
Ich wollte hier nun keine C++ vs. Delphi Diskussion anleiern, sondern bin eigentlich nur auf der Suche nach einer Problemlösung.

Hat denn keiner eine Idee, wie ich das Problem am besten lösen kann ?

Kann mir denn einer sagen, ob die WinSock Funktion "select()" mir bei diesem Problem weiterhelfen kann ?


mfg
PeterP.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#9

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 14. Dez 2004, 13:34
Zitat von PeterP.:
@jim_raynor
Danke für den Tip, aber lies dir doch mal mein Posting durch und schau dir die SocketUnit von mir mal an. Dann wirst du merken, daß das ganze schon ohne VCL auskommt. Und somit ja schon non-VCL ist.
Mir gings auch nur daraum, dass du den Chat in der Konsole machst. Mit nonVCL meine ich also normale Windows-Formulare ohne die VCL
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#10

Re: Router geht Offline, wie bekommt das ein ClientSocket mi

  Alt 14. Dez 2004, 13:36
Hallo,

zu deinem Problem:

Wenn die Verbindung unterbrochen wird hast du keine Chance das mitzubekommen, erst wenn Packete gesendet werden kann ein Router so net sein und ICMP Packete zurückschicken die deinem IP-Stack sagen das die Verbindung wech ist. Dein Router scheint ein imho dummes Exemplar zu sein wenn er einfach die schon laufende TCP-Verbindung auf eine neue IP maskiert, eigentlich sollten beim offline gehen alle Verbindungen entfernt werden (und TCP Packete (ich nehme jetzt mal an du verwendest TCP) ohne SYN Flag zu maskieren halte ich im Heimbereich für sehr fragwürdig). Du könntest also höchstens dummy Packete senden um es so eher mitzubekommen, eine ordentliche Lösung sehe ich aber nicht.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz