Данный код позволяет делать p2p между пользователями, но бывает работает через раз. Тестили с другом, все работает прекрасно. Но как только он пытается сделать тоже самое с другим пользователем, все перестает работать. Может разные типы NAT или еще чего.
Сама программа подключается к STUN-серверу и получает публичные ip. Потом при подключении через сторонний сервеp (используем текстовые сообщения jabber) делаем инициализацию и обмен ip между пользователями. Но что-то идет не так(
switch (data.com)
{
case "Call":
if (MessageBox.Show("Звонок от " + msg.From.Bare, "Входящий", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
//Была нажата кнопка “Yes”
string ipp = data.data; //Получает ip вызывающего пользлвателя
userEndPoint = new IPEndPoint(IPAddress.Parse(ipp.Substring(0, ipp.IndexOf(":"))),
Convert.ToInt32(ipp.Substring(ipp.IndexOf(":") + 1)));
UDPMess(); //Отправляем ему UDP пакет
To = msg.From;
SentTo(Command.Yes, myEndPoint, msg.From); //Сообщаем серверу что мы ожидаем пользователя и свой ip
StartVoice(); //Начинаем передачу голоса
}
else
{
SentTo(Command.No, null, msg.From); //Сообщаем серверу об отказе
}
break;
case "Yes":
//Происходит, если пользователь согласился на передачу и ожидает отклика
//Все тоже самое только для инициирующей передачу стороны
string ip = data.data;
userEndPoint = new IPEndPoint(IPAddress.Parse(ip.Substring(0, ip.IndexOf(":"))),
Convert.ToInt32(ip.Substring(ip.IndexOf(":") + 1)));
UDPMess();
To = msg.From;
StartVoice();
MessageBox.Show("Пользователь " + msg.From.Bare + " принял вызов");
break;
}