Toon posts:

[VB6] UDP door een router/firewall

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben samen met iemand anders een multiplayermod aan het maken voor GTA 3 (ja ik weet het, die bestaat al, maar het is toch leuk om zelf iets te maken ;)).
Nou maak ik daarvoor gebruik van het UDP protocol.
Je hebt een centrale server die een lijstje bijhoudt van geconnecte users. Om te connecten stuur je een pakketje met commandbit 1 ('connect'), en als data je nick. Het serverprogje slaat dan je nick samen met de afzender-ip op in een lijst.
Als er dan een andere user connect stuurt de server naar alle mensen in deze lijst een pakketje met 'User x heeft de server gejoined'.
Dat werkt prima als ik het op localhost draai, maar ik krijg last van hele wazige problemen zogauw ik het over internet doe.
Users kunnen wel een connectpakketje naar mijn server sturen, en ik krijg dan ook keurig in mijn client (zelfde comp als server, localhost dus) te zien dat die user geconnect is, maar alle pakketjes die de server naar een user op internet stuurt komen niet aan. De pakketjes die hij naar de client op localhost stuurt wel.

Waarschijnlijk heeft dit dus te maken met firewalls en routers, aangezien het dus over internet 1-richtingsverkeer wordt, maar de betreffende users zeggen dat ze iedere mp-game gewoon kunnen spelen zonder extra instellingen op hun router, zoals SoF en Quake, die toch allebei met het UDP protocol werken.

Mijn vraag is dus: hoe zorg je dat je een UDP 'verbinding' krijgt door een router heen, zonder op die router een virtual server te maken?

Verwijderd

Verwijderd schreef op 06 May 2003 @ 14:37:
Nou maak ik daarvoor gebruik van het UDP protocol.
Je hebt een centrale server die een lijstje bijhoudt van geconnecte users. Om te connecten stuur je een pakketje met commandbit 1 ('connect'), en als data je nick. Het serverprogje slaat dan je nick samen met de afzender-ip op in een lijst.
Als er dan een andere user connect stuurt de server naar alle mensen in deze lijst een pakketje met 'User x heeft de server gejoined'.
Dat werkt prima als ik het op localhost draai, maar ik krijg last van hele wazige problemen zogauw ik het over internet doe.
Users kunnen wel een connectpakketje naar mijn server sturen, en ik krijg dan ook keurig in mijn client (zelfde comp als server, localhost dus) te zien dat die user geconnect is, maar alle pakketjes die de server naar een user op internet stuurt komen niet aan. De pakketjes die hij naar de client op localhost stuurt wel.
Een eigenschap van UDP is, dat het onbetrouwbaar is en er dus pakketjes kunnen verdwijnen.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 06 May 2003 @ 14:37:
Mijn vraag is dus: hoe zorg je dat je een UDP 'verbinding' krijgt door een router heen, zonder op die router een virtual server te maken?
Niet. Een server verstuurt simpelweg nooit dingen naar een client, maar geeft er alleen antwoord op. En dat komt altijd wel aan (solicited traffic zogezegd).

Sowieso slaat dat IP dat je opslaat meestal nergens op zodra mensen routers hebben, want zij zitten dan op IP 192.168.*.* achter een firewall, en als jij naar 123.246.12.34 of zo iets gaat sturen komt het niet aan. Da's nou net het hele idee erachter, dat je er niet door kunt tunnelen zonder dat er expliciet een virtual server is aangemaakt :>

[edit]
Kort samengevat (tislaat): de clients moeten 'pollen' bij de server naar interessante data, dan kan het allemaal wel.

[ Voor 10% gewijzigd door curry684 op 07-05-2003 03:42 ]

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 06 May 2003 @ 21:05:
Een eigenschap van UDP is, dat het onbetrouwbaar is en er dus pakketjes kunnen verdwijnen.
Dank voor deze nuttige bijdrage maar de betrouwbaarheid van UDP ligt wel tegen de 100% aan en dus niet rond de 0%.

Professionele website nodig?


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
curry684 schreef op 07 mei 2003 @ 03:41:
[...]

Dank voor deze nuttige bijdrage maar de betrouwbaarheid van UDP ligt wel tegen de 100% aan en dus niet rond de 0%.
eh UDP is stateless en bezorging word niet gegrandeerd zoals bij TCP/IP dat is dus wel een van de eigenschappen van UDP.

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

4of9 schreef op 07 mei 2003 @ 09:57:
eh UDP is stateless en bezorging word niet gegrandeerd zoals bij TCP/IP dat is dus wel een van de eigenschappen van UDP.
sinaasappelsap probeerde de packet loss van 100% van de topicstarter te verklaren door te zeggen dat UDP geen aflevergarantie biedt. En zoals ik zeg ligt die betrouwbaarheid tegen de 100%, oftewel je bevestigt enkel wat ik zei: het gaat meestal goed en zelden fout.

Graag allebei het topic lezen voordat je reageert :Z

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 07 May 2003 @ 03:40:
[...]

[edit]
Kort samengevat (tislaat): de clients moeten 'pollen' bij de server naar interessante data, dan kan het allemaal wel.
En hoe doe je dat dan?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Iedere x seconden roepen alle clients naar de server 'OY IS ER NIEUWS VOOR MIJ?' en als dat zo is antwoordt de server daarop met 'OY WE HEBBEN EEN NIEUWE USER PIETJE IN DE GAME!!!'

:)

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 07 mei 2003 @ 20:42:
Iedere x seconden roepen alle clients naar de server 'OY IS ER NIEUWS VOOR MIJ?' en als dat zo is antwoordt de server daarop met 'OY WE HEBBEN EEN NIEUWE USER PIETJE IN DE GAME!!!'

:)
Da's wel leuk enzo, maar hoe zorg ik dan dat hij dat verstuurt als een reply?

  • nero355
  • Registratie: Februari 2002
  • Laatst online: 10-07 17:18

nero355

ph34r my [WCG] Cows :P

curry684 schreef op 07 mei 2003 @ 20:42:
Iedere x seconden roepen alle clients naar de server 'OY IS ER NIEUWS VOOR MIJ?' en als dat zo is antwoordt de server daarop met 'OY WE HEBBEN EEN NIEUWE USER PIETJE IN DE GAME!!!'

:)
En dit moet heel vaak heel snel gebeuren anders heb je LAGG :(

* nero355 hates LAGG dus ik zeg het effe maar een beetje gamer wist dit al, wat dus TS al is :)

|| Stem op mooiere Topic Search linkjes! :) " || Pi-Hole : Geen advertenties meer voor je hele netwerk! >:) ||


Verwijderd

Topicstarter
nero355 schreef op 08 mei 2003 @ 15:26:
[...]


En dit moet heel vaak heel snel gebeuren anders heb je LAGG :(

* nero355 hates LAGG dus ik zeg het effe maar een beetje gamer wist dit al, wat dus TS al is :)
10 locatie-updates per seconde met 0,5kb/s per player is toch niet echt veel lag :)
Maar is er nou eigenlijk verschil tussen een 'reply-pakketje' en een 'gewoon' pakketje? Is het hetzelfde?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op 07 May 2003 @ 03:40:
[...]

Niet. Een server verstuurt simpelweg nooit dingen naar een client, maar geeft er alleen antwoord op. En dat komt altijd wel aan (solicited traffic zogezegd).
UDP pakketjes zijn altijd los. Als de client info opvraagt stuurt hij een pakketje naar de server. De server reageert daarop door een pakketje terug te sturen. De router kan niet weten dat dat teruggaande pakketje bij het zojuist binnen gekomen pakketje van de client hoort, dat staat geheel los van elkaar.

Bovendien zegt ie dat de binnenkomende pakketjes wel aankomen, maar uitgaande pakketjes tegen worden gehouden. Terwijl dat toch precies het 'vraag en antwoord' systeem is wat jij zegt.
Sowieso slaat dat IP dat je opslaat meestal nergens op zodra mensen routers hebben, want zij zitten dan op IP 192.168.*.* achter een firewall, en als jij naar 123.246.12.34 of zo iets gaat sturen komt het niet aan. Da's nou net het hele idee erachter, dat je er niet door kunt tunnelen zonder dat er expliciet een virtual server is aangemaakt :>
da's alleen bij NAT, en dat geldt meestal ook alleen maar voor uitgaand verkeer (de pakketjes die van het locale netwerk naar internet gaan krijgen het (internet-) ip van de router). Binnenkomende pakketjes die van het internet af komen behouden hun eigen internet-ip. Als je iets naar dat ip terug stuurt gaat het namelijk toch wel weer gewoon via de router
nero355 schreef op 08 May 2003 @ 15:26:
[...]


En dit moet heel vaak heel snel gebeuren anders heb je LAGG :(

* nero355 hates LAGG dus ik zeg het effe maar een beetje gamer wist dit al, wat dus TS al is :)
Lag schrijf je met 1 g ;)


Remboooo:
Hoe maak je je socket aan aan de client kant? Bind je die aan een vast poort nummer?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • nero355
  • Registratie: Februari 2002
  • Laatst online: 10-07 17:18

nero355

ph34r my [WCG] Cows :P

.oisyn schreef op 08 mei 2003 @ 16:48:
Lag schrijf je met 1 g ;)
Wist ik niet bedankt foutje moet kunnen :)

|| Stem op mooiere Topic Search linkjes! :) " || Pi-Hole : Geen advertenties meer voor je hele netwerk! >:) ||


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik roeleer nu ik het zo teruglees... om 03:40 zat ik TCP uit te leggen en om 03:41 UDP.

* curry684 gaat de volgende keer op tijd naar bed :D

Professionele website nodig?


Verwijderd

Verwijderd schreef op 06 May 2003 @ 14:37:
Nou maak ik daarvoor gebruik van het UDP protocol.
Je hebt een centrale server die een lijstje bijhoudt van geconnecte users. Om te connecten stuur je een pakketje met commandbit 1 ('connect'), en als data je nick. Het serverprogje slaat dan je nick samen met de afzender-ip op in een lijst.
Als er dan een andere user connect stuurt de server naar alle mensen in deze lijst een pakketje met 'User x heeft de server gejoined'.
Dat werkt prima als ik het op localhost draai, maar ik krijg last van hele wazige problemen zogauw ik het over internet doe.
Users kunnen wel een connectpakketje naar mijn server sturen, en ik krijg dan ook keurig in mijn client (zelfde comp als server, localhost dus) te zien dat die user geconnect is, maar alle pakketjes die de server naar een user op internet stuurt komen niet aan. De pakketjes die hij naar de client op localhost stuurt wel.

Waarschijnlijk heeft dit dus te maken met firewalls en routers, aangezien het dus over internet 1-richtingsverkeer wordt, maar de betreffende users zeggen dat ze iedere mp-game gewoon kunnen spelen zonder extra instellingen op hun router, zoals SoF en Quake, die toch allebei met het UDP protocol werken.

Mijn vraag is dus: hoe zorg je dat je een UDP 'verbinding' krijgt door een router heen, zonder op die router een virtual server te maken?
Portmapping op de router instellen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 08 May 2003 @ 23:46:
[...]

Portmapping op de router instellen.
andere spellen schijnen ook te werken volgens hem, en ik geloof niet dat al die spellen speciaal gemapped zijn

Wat mij de fout lijkt te zijn, en daarom vroeg ik ook hoe hij de sockets aan de client kant aanmaakte, dat hij een verschillende verstuur- en leessocket aanmaakt. De leessocket doet ie op een vast poortnummer. Als de server een berichtje krijgt van de client dan stuurt ie een antwoord naar dat vaste poortnummer ipv gewoon naar de socket waar ie vandaan kwam, waardoor het dus geblocked wordt.

ik vermoed dat dat de fout is

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Hier is ff precies hoe ik het nu doe:

- client heeft 1 winsock gebind aan poort 4004 voor ontvangen & zenden
- server heeft 1 winsock gebind aan poort 4005 voor onvangen & zenden

- als een client een 'connect'-pakketje stuurt, slaat de server dat ip op in een lijst
- als een client een broadcastpakketje stuurt stuurt de server dat pakketje naar alle clients in de lijst

[ Voor 9% gewijzigd door Verwijderd op 09-05-2003 14:52 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Probeer de client eens niet te binden op een poort (waardoor ie dus een default poort krijgt). Als een pakketje op de server binnen komt, gebruik dan de source ip en source port om een pakketje terug te sturen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1