[delphi] Server scanner werkt niet

Pagina: 1
Acties:
  • 115 views sinds 30-01-2008
  • Reageer

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Topicstarter
Ik ben een chatprogramma aan het bakken en bij het starten laadt het programma een lijstje servers uit een bestandje. In het menu zit een optie waarmee het programma moet kijken welke server online is en welke niet. Dat heb ik als volgt gemaakt:
for i := 0 to ChatServers.Count - 1 do begin
ServerName := TChatServer (ChatServers [i]).GetName;
ServerAddress := TChatServer (ChatServers [i]).GetAddress;
ServerPort := TChatServer (ChatServers [i]).GetPort;
ClientSocket.Active := false;
ClientSocket.Address := ServerAddress;
ClientSocket.Port := ServerPort;
try
ClientSocket.Active := true;
AddMessageLine ('Server ' +#34+ ServerName +#34+ ' ('+ServerAddress+':'+IntToStr (ServerPort)+') is online', 65280);
except
AddMessageLine ('Server ' +#34+ ServerName +#34+ ' ('+ServerAddress+':'+IntToStr (ServerPort)+') is not online', 255);
end;
end;

Maar het werkt niet!!! Hij meldt bij elke server gewoon dat ie online is. :? Iemand een idee hoe het *wel* moet?

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ik zou eerst eens beginnen met een begin en een end achter for... te zetten

enuhh waarom doe je het met try?? gewoon op een onerror event doen bij je socket..

procedure cliensocket1.onerror(bla...)
begin
errorcode:=0;
memo1.lines.add('server'+server+'is offline');
end;

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Topicstarter
Duh er STAAT een begin achter for blabla.. eerst kijken, dan opmerken. Ik ben niet 8erlijk ofzo.. Ik heb al 3D-engines geprogrammeerd, vertel mij niks over begins en ends.

Maareh thanx voor de OnError-tip, ik zal ff kijken of et goed werkt.

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Topicstarter
Nou het OnError ding werkt niet echt. Alleen de OnLookup en OnConnecting events worden aangeroepen en dan houdt het op.

Nu heb ik het anders gedaan: Na het activaten van de ClientSocket kijk ik of ClientSocket.Socket.Connected true of false is. Dan weet je of de connectie gelukt is.

Maar dit is eigenlijk niet de bedoeling. Ik hoef helemaal niet in te loggen ofzo, ik wil alleen weten of de server online is. Kan dat niet op een andere manier?

  • yodax
  • Registratie: Januari 2000
  • Laatst online: 28-04 08:47
Je kan direct de socket API van windows gebruiken. Check MSDN

Kijk Hier voor de connect functie, deze geeft een return value (int, die je via een enum type leesbaar kunt maken) Je weet dan wat er gebeurt is.

Kijk ook even in de TOC en kijk dan hoe je netjes moet constructen en opruimen, want ik neem aan dat je dit op meerdere servers wil doen of vaak op 1 zelfde. Iig je wil dus geen memory leaks, of een vol lopende TCP stack...

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Topicstarter
Pittig die API docs. Tenminste, zo komt het op mij over... Kheb echt geen ervaring met API's. Is er niet een simpelere oplossing? Het lijkt erop dat je bij deze implementatie ook moet gaan verbinden via WSP-routines enzo en dan gaan we weer een hele andere kant op. Of zit ik helemaal mis?

  • tom kuipers
  • Registratie: Juli 1999
  • Laatst online: 23-02-2025
GerbenW, heb je die 3d engine ook geprogrammeerd zonder ook maar iets in te springen enzo. Of ben je gewoon vergeten je source tussen code tags te zetten ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Op zondag 17 juni 2001 22:00 schreef GerbenW het volgende:
Nou het OnError ding werkt niet echt. Alleen de OnLookup en OnConnecting events worden aangeroepen en dan houdt het op.

Nu heb ik het anders gedaan: Na het activaten van de ClientSocket kijk ik of ClientSocket.Socket.Connected true of false is. Dan weet je of de connectie gelukt is.

Maar dit is eigenlijk niet de bedoeling. Ik hoef helemaal niet in te loggen ofzo, ik wil alleen weten of de server online is. Kan dat niet op een andere manier?
Door op de een of andere manier een ping-commando in uw prog te implementeren.?

https://fgheysels.github.io/


  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Op zondag 17 juni 2001 20:51 schreef GerbenW het volgende:
Duh er STAAT een begin achter for blabla.. eerst kijken, dan opmerken. Ik ben niet 8erlijk ofzo.. Ik heb al 3D-engines geprogrammeerd, vertel mij niks over begins en ends.

Maareh thanx voor de OnError-tip, ik zal ff kijken of et goed werkt.
sow hele 3d engines gecode en dan niet eens zo iets simpels voormekaar krijgen??

gebruik trouwens een ander soort socket. die sockets die standaart bij delphi zitten zijn brak. een id is ook de server"geweoon" te pingen.

2 opties:
1 je laat dit delphi doen
2 je laat dit "gewoon" ping doen en de output vang je af

  • yodax
  • Registratie: Januari 2000
  • Laatst online: 28-04 08:47
Op maandag 18 juni 2001 23:10 schreef THIJZEL het volgende:

[..]

2 opties:
1 je laat dit delphi doen
2 je laat dit "gewoon" ping doen en de output vang je af
Het probleem met pingen is alleen dat de er een hoop servers zijn die ping blokkeren.

Je kan dus beter een SYN sturen en wachten op de ACK. Dit is het gene wat je doet als je die socket opend.

Maar als je een 3D engine kan programmeren moet je toch ook wel zoiets simpels als de windows API aan kunnen. Dat heb je voor een 3D engine toch ook best wel nodig , maar goed. De topic starter heb ik ook al even niet meer gezien....

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Op maandag 18 juni 2001 23:25 schreef yodax het volgende:

[..]

Het probleem met pingen is alleen dat de er een hoop servers zijn die ping blokkeren.

Je kan dus beter een SYN sturen en wachten op de ACK. Dit is het gene wat je doet als je die socket opend.

Maar als je een 3D engine kan programmeren moet je toch ook wel zoiets simpels als de windows API aan kunnen. Dat heb je voor een 3D engine toch ook best wel nodig , maar goed. De topic starter heb ik ook al even niet meer gezien....
haha net zoals dit:?
[topic=153278]

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Op maandag 18 juni 2001 23:10 schreef THIJZEL het volgende:

[..]


gebruik trouwens een ander soort socket. die sockets die standaart bij delphi zitten zijn brak.
Indy is best goed.
Zit standaard in Delphi 6 (Enterprise) :)

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • The-Source
  • Registratie: Augustus 2001
  • Laatst online: 13-09 22:44
Op maandag 18 juni 2001 23:25 schreef yodax het volgende:

[..]

Het probleem met pingen is alleen dat de er een hoop servers zijn die ping blokkeren.

Je kan dus beter een SYN sturen en wachten op de ACK. Dit is het gene wat je doet als je die socket opend.

Maar als je een 3D engine kan programmeren moet je toch ook wel zoiets simpels als de windows API aan kunnen. Dat heb je voor een 3D engine toch ook best wel nodig , maar goed. De topic starter heb ik ook al even niet meer gezien....
Ik weet het is een oud bericht :o
Maar nu heb ik die syn berichtjes nodig. (ik ben er vandaag mee begonnen). Ik heb dus de laatste ICS gedownload maar nu weet ik eigenlijk nog niet hoe is zoiets stuur. (het gaat er om het volgende: ik moet een eigen tcp of udp bericht op stellen (aan de hand van raw socket gedoe) maar ik weet niet hoe ik zo iets stuur (welk commando) Ik heb via google ook winsock 2 gedownload en daar staat wel een hoop info in de source maaar niet het gene wat ik nou net moet hebben. Het kan trouwens ook zo maar wezen dat het een icmp bericht of zoiets moet wezen maar ik weet het zelf niet.
Wie help mij verder.

PS. ik heb XP prof dus de raw socket acces is aanwezig.

Taal fouten inbegrepen ;)

Pagina: 1