[Winsock] Standaard procedure client-client programma

Pagina: 1
Acties:

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 09-04 16:10
Ik heb een situatie waarin twee PC's met elkaar gegevens moeten kunnen uitwisselen. Deze mogen in willekeurige volgorde worden opgestart, en de programma's die op de PC's draaien weten dus niet of het andere programma al draait. Nu vraag ik me dus af wat de standaard procedure is om dit aan te pakken.

In de huidige situatie maakt één van de twee programma's verbinding met de andere, en als dit mislukt kan er dus uberhaupt geen verbinding meer worden gemaakt. Het keer op keer proberen te verbinden resulteert overigens in een ConnectionForcefullyRejected error.

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Hm, 2 client programma's die alleen maar vragen om een verbinding met elkaar zullen elkaar nooit begrijpen. ;)
Om 2 programma's een verbinding te laten maken zul je m.i. toch de clients ook moeten laten luisteren naar inkomende verbindingen.

Misschien is het makkelijk als je iets meer verteld over wat je programma moet gaan doen en in welke taal je het schrijft.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Zoals zwippie reeds aangeeft zul je toch 1 van de 2 tot server moeten uitroepen. Ik zou dit zelf simpel doen door een server-socket te starten en vervolgens als client proberen te connecten aan de doos van de andere. Je zorgt er dmv synchronizatie voor dat maar 1 van de 2 connecties kan lukken (eerst komt eerst maalt) en gaat vervolgens netjes handshaken. Hey presto, 1 tcp-connectie :)

Professionele website nodig?


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 09-04 16:10
curry684 schreef op 08 december 2003 @ 15:21:
Zoals zwippie reeds aangeeft zul je toch 1 van de 2 tot server moeten uitroepen. Ik zou dit zelf simpel doen door een server-socket te starten en vervolgens als client proberen te connecten aan de doos van de andere. Je zorgt er dmv synchronizatie voor dat maar 1 van de 2 connecties kan lukken (eerst komt eerst maalt) en gaat vervolgens netjes handshaken. Hey presto, 1 tcp-connectie :)
Dit gebeurt nu in feite ook. Jullie hebben waarschijnlijk idd gelijk dat het gewoon onmogelijk is, zag zelf nl. ook niet echt een logisch oplossing.

Punt is alleen dat als ik probeer meer dan 2 keer te verbinden dat ik een Connection Forcefully Rejected error krijg, terwijl de state van de winsock control gewoon closed is.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Limhes schreef op 08 december 2003 @ 16:45:
[...]
Punt is alleen dat als ik probeer meer dan 2 keer te verbinden dat ik een Connection Forcefully Rejected error krijg, terwijl de state van de winsock control gewoon closed is.
Bij spamconnects op een closed port is een willekeurige firewall of TCP-stack gerechtigd om forceful te weigeren, dus da's niet zo vreemd.

Je hoeft ook niet zoveel te connecten, doe gewoon:
• Start listener socket
• Connect aan andere bak
• If no connect -> keep waiting tot jij zelf een verbinding krijgt, jij bent baas
• If wel connect en geen connectie op jouw eigen socket: andere is baas
• If wel connect *en* verbinding op eigen socket: ga handshaken (of stel laagste IP = baas bijvoorbeeld)

Professionele website nodig?