2016-05-13 10 views
-1

Ich arbeite in einem Projekt in meiner Schule, wo wir ein Multiplayer-Online-Spiel programmieren. Ich arbeite an der Verbindung zwischen Server und Client und ich stolperte auf ein Problem, das ich hoffe, dass Sie mir helfen können.Windows Firewall blockiert UDP Verbindung

So habe ich eine funktionierende TCP-Verbindung zwischen Server und Clients, die die Clients ip nimmt ihnen eine ID auf dem Server. Wenn die Verbindung zwischen 4 Clients und dem Server hergestellt wird, startet das Spiel und ich wechsle zur UDP-Verbindung, da viele Pakete gesendet werden.

/* Problem */

Das Problem, das ich habe, ist, dass die Clients UDP-Pakete an den Server senden kann, die dann an den Kunden weiterleitet. Aber einige Clients auf verschiedenen Computern blockiert Windows Firewall die eingehenden UDP-Pakete vom Server. Also Client zu Server funktioniert aber nicht Server zu Clients. Wenn ich die Windows-Firewall deaktiviere, funktioniert alles.

Wie mache ich eine Ausnahme in der Firewall oder die Meldung, dass der Benutzer entscheiden kann, ob sie die eingehende Verbindung akzeptieren?

+0

Mögliches Duplikat [Programmatically eine Anwendung auf Windows-Firewall hinzufügen] (http://stackoverflow.com/questions/113755/programmatically-add -eine-Anwendung-zu-Windows-Firewall) –

Antwort

0

So fand ich eine Lösung für mein Problem. Mein Problem war, dass ich meinen Computer entscheiden ließ, welchen UDP-Port er verwenden wollte, aber dies löste die Firewall nicht aus, sondern blockierte ihn, sodass ich einen "falschen" Socket einsetzte, der die Firewall alarmierte, damit der Benutzer meiner Software zustimmen konnte Benutze den Port und lass den Computer danach entscheiden.

(initUDPSocket ist meine eigene gemacht fucntion einschließlich nicht in SDL_net)

UDPpacket *p; 
UDPsocket UDPsd, testsd; 

testsd = initUDPSocket(11111); /* This socket alerts the firewall and ask for permission */ 

SDLNet_UDP_Close(testsd); 
testsd=NULL; //this helps us know that this UDPsocket is not valid anymore 

/*Open a UDP socket for reaching server from client */ 
UDPsd = initUDPSocket(0);    /* 0 = port value, 0 = any available port on the computer */