2016-05-13 4 views
-1

Я работаю над проектом в своей школе, где мы программируем многопользовательскую онлайн-игру. Я работаю над связью между сервером и клиентом, и я наткнулся на проблему, на которую надеюсь, что вы сможете мне помочь.Брандмауэр Windows, блокирующий UDP-соединение

Таким образом, у меня есть рабочее TCP-соединение между сервером и клиентами, которое захватывает клиентов ip, давая им идентификатор на сервере. Когда соединение установлено между 4 клиентами и сервером, начинается игра, и я переключаюсь на UDP-соединение, потому что будет отправлено много пакетов.

/* Проблема */

Проблемы я имею в том, что клиенты могут отправлять пакеты UDP на сервер, который затем перенаправляет его клиентам. Но некоторые клиенты на разных компьютерах блокируют брандмауэр Windows входящих пакетов UDP с сервера. Таким образом, клиент к серверу работает, но не сервер для клиентов. Когда я отключу брандмауэр Windows, тогда все работает.

Как сделать исключение в брандмауэре или запросить сообщение, которое позволяет пользователю решить, принимают ли они входящее соединение?

+0

Возможный дубликат [Программным добавить приложение в брандмауэре Windows] (http://stackoverflow.com/questions/113755/programmatically-add -an-приложение-брандмауэр Windows) –

ответ

0

Так что я нашел решение своей проблемы. Моя проблема заключалась в том, что я разрешил компьютеру решить, какой UDP-порт он хочет использовать, но это не вызвало блокировку брандмауэра, поэтому я действительно ввел «фальшивый» сокет, который предупредил брандмауэр, чтобы они могли согласиться с моим программным обеспечением используйте порт и после этого разрешите компьютеру решить.

(initUDPSocket мой собственный сделал fucntion не включая в 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 */ 
Смежные вопросы