[indy 9] tcp/ip : IP adres van client te weten komen

Pagina: 1
Acties:

  • Glacier
  • Registratie: Juli 2000
  • Niet online
Edit : Ik gebruik dus delphi 7 (waarom zet ik dat ook niet in de topictitel en het topic, maargoed :X )

Ik ben momenteel in de eindfase van een applicatie waarmee DJ's on air kunnen gaan op een internet radiostation. Heel simpel, de DJ logt voor het hele uur in en plant een live show in. Daarna begint de client af te tellen, zodat de DJ weet wanneer die on air is :)
Probleem alleen is dat het tellen op de volgende manier gebeurt: de server geeft na het inplannen een integer terug, wat staat voor het aantal seconden tot aan de live show. dan maak ik een timer aan die elke seconden 1 sec van die integer afhaalt, en als ie op 0 staat...nouja, je snapt het wel ;)
Probleem is alleen dat dat niet altijd even betrouwbaar blijkt. Het komt niet altijd 100% goed uit, waarschijnlijk omdat de client computer ergens anders mee bezig is en het aftellen geen prioriteit heeft, waardoor 1 seconde wel eens langer duurt dan een seconde.
Ik wil dus dat de server de client 1 minuut van tevoren ff een seintje geeft aan de client, zodat die weet dat er nog maar 60sec te gaan zijn.

Het probleem is dus alleen dat ik het IP adres van de client niet te weten kom :? Ik heb overal gezocht en in delphi de help gebruikt, gegoogled, geGoT :P maar ik kom er niet uit.
Ik gebruik idTCPserver van indy 9 :)

Ik heb het volgende in de procedure:
code:
1
2
3
4
5
6
TFrm_Main.IdTCPServer1TimeCommand(ASender: TIdCommand);
Var
 ipadres : String;
Begin
 ipadres := ASender.Thread.Connection.LocalName
End;

Maar dat geeft dus alleen de name van de computer waarop de server draait, en hier heb ik nogal weinig aan :P

Dus als iemand weet hoe ik het ip adres te weten kan komen, ik hoor het graag :)

En nu maar hopen dat het niet iets al te simpels is, want hier ben ik dus al een behoorlijk tijd mijn hoofd over aan het breken :P

[ Voor 4% gewijzigd door Glacier op 04-08-2004 16:34 ]


Verwijderd

ASender.Thread.Connection.Socket.Binding.IP voor het locale IP adres, en ASender.Thread.Connection.Socket.Binding.PeerIP voor het adres aan de andere kant.

Verwijderd

Nu ben ik helemaal geen Delphi-expert en wist tot 5 minuten geleden niet wat Indy was, maar je vraag kan ik wel beantwoorden, die staat namelijk in de Knowledge Base van Indy:
code:
1
2
3
4
5
6
7
  uses IdIOHandlerSocket;

  procedure TfrmMain.TCPServerConnect(AThread: TIdPeerThread);
  var PeerIP : String;
  begin
    PeerIP := AThread.Connection.Socket.Binding.PeerIP;
  end;

  • jurri@n
  • Registratie: Maart 2000
  • Laatst online: 10:54
Je zou ook iedere 30 sec. even de tijd op de client met de server kunnen verifieren... connecten vanaf de server naar de client gaat niet altijd (denk aan NAT-netwerkjes waar je moet portforwarden, firewalls, proxy's, enz.)

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 22-05 12:29
Eigenlijk is je constructie van aftellen al niet goed. Je mag er niet vanuit gaan dat de timer effectief iedere seconde getriggerd wordt.

wat je beter doet is:

1) je krijgt van de server het aantal seconden hoe lang het nog duurt voor de dj mag beginnen
2) je berekent hoe laat dit effectief is.
3) je laat de timer om de x aantal tijd (om de hoeveel tijd is niet zo relevant) kijken hoe laat het dan is, en hoe lang het dus nog duurt voor de dj mag beginnen.
Het interval kan je laten afhangen van hoe lang het nog duurt: indien het nog 24 uur is, laat je de timer bvb maar 1 keer per half uur checken, indien nog 1 uur: om de 5 minuten, indien nog 10 minuten: iedere minuut, enz

Dan heb je geen tussenkomst meer nodig van de server.

  • Glacier
  • Registratie: Juli 2000
  • Niet online
schoene schreef op 04 augustus 2004 @ 17:24:
Eigenlijk is je constructie van aftellen al niet goed. Je mag er niet vanuit gaan dat de timer effectief iedere seconde getriggerd wordt.

wat je beter doet is:

1) je krijgt van de server het aantal seconden hoe lang het nog duurt voor de dj mag beginnen
2) je berekent hoe laat dit effectief is.
3) je laat de timer om de x aantal tijd (om de hoeveel tijd is niet zo relevant) kijken hoe laat het dan is, en hoe lang het dus nog duurt voor de dj mag beginnen.
Het interval kan je laten afhangen van hoe lang het nog duurt: indien het nog 24 uur is, laat je de timer bvb maar 1 keer per half uur checken, indien nog 1 uur: om de 5 minuten, indien nog 10 minuten: iedere minuut, enz

Dan heb je geen tussenkomst meer nodig van de server.
das inderdaad ook een goed id ja :)
is ook wat makkelijker dan tussenkomst van de server :)

thnx voor de replies allemaal :)
Pagina: 1