2015-04-27 3 views
1

в моем простом скрипте поиска usp-сервера, когда я выбираю клиент, он делает крах единства, и я не могу найти причину;Единство падает, когда скрипт запускает

import System.Net.Sockets; 

private var udp_server:UdpClient; 
private var udp_client:UdpClient; 
private var udp_port:int = 18000; 
private var udp_broadcast_ip:IPAddress = IPAddress.Parse ("224.0.0.224"); 

private var udp_received_message:String; 
private var udp_endpoint:IPEndPoint; 

private var selected:boolean = false; 
private var clientStarted:boolean = false; 

function StartServer(){ 

    udp_server = new UdpClient(udp_port, AddressFamily.InterNetwork); 

    udp_server.JoinMulticastGroup(udp_broadcast_ip); 
    udp_endpoint = new IPEndPoint(udp_broadcast_ip, udp_port); 

    InvokeRepeating("StartBroadcastUDP", 0.0,0.3); 
} 

function StartClient(){ 
    udp_client = new UdpClient(); 

    udp_endpoint = new IPEndPoint(IPAddress.Any, udp_port); 
    udp_client.Client.Bind(udp_endpoint); 

    udp_client.JoinMulticastGroup(udp_broadcast_ip); 

    /* 
    while(true){ 
     yield; 
     var udp_received_message_byte:byte[] = udp_client.Receive(udp_endpoint); 
     udp_received_message = Encoding.Unicode.GetString(udp_received_message_byte); 
     print("Received Message: " + udp_received_message); 
    }*/ 

    clientStarted = true; 

} 

function StartBroadcastUDP(){ 
    var udp_broadcast_message = Encoding.Unicode.GetBytes("GAME SERVER"); 

    if(udp_broadcast_message != ""){ 

     udp_server.Send(udp_broadcast_message, udp_broadcast_message.Length); 
    } 
} 

function OnGUI(){ 
    if(!selected){ 
     if(GUI.Button(Rect(0, 0, 100, 100), "Server")){ 
      StartServer(); 
      selected = true; 
     }else if(GUI.Button(Rect(100, 0, 100, 100), "Client")){ 
      StartClient(); 
      selected = true; 
     } 
    } 
} 

function Update(){ 
    /* 
    if(clientStarted){ 
     var udp_received_message_byte:byte[] = udp_client.Receive(udp_endpoint); 
     udp_received_message = Encoding.Unicode.GetString(udp_received_message_byte); 
     print("Received Message: " + udp_received_message); 
    }*/ 
} 

в обоих комментировал части я пытался сделать это, в первую я использовал время, чтобы держать его в одной и той же функции, но он упал так я mmoved его в функцию обновления, но она по-прежнему падает. Помогите?

+0

Если код с комментариями не является необходимым для воспроизведения ошибки, зачем вообще публиковать ее? Было бы легче найти проблему, если бы вы оставили только минимальный код, который может воспроизвести проблему. –

+0

Кроме того, что означает «сбой», точно? –

+0

код комментария - это то, что делает сбой; когда я раскомментирую цикл while в функции StartClient, он сначала сработает, хотя это был цикл while, который заставил его сбой, поэтому я прокомментировал его и снова написал в функции обновления, поэтому, когда я говорю, что clientstarted является true в startclient(), функция обновления будет запускать код, но это также приводит к сбою, поэтому я не могу догадываться, что заставляет его терпеть крах (когда я говорю об аварии, которую я имею в виду в Windows, редактор не реагирует и, в конце концов, закрывается сам, а на андроиде просто закрывает приложение) , также, если это поможет здесь файл журнала - http://pastebin.com/JZ1kY62a – 404ErrorFree

ответ

0

while(true) в StartClient() действительно сделает редактор/приложение, чтобы быть заморожен, потому что StartClient() не называется сопрограмму, так доходность не возвращается к двигателю Unity, и ваша программа застревает навсегда в то время.

Есть и другое. Похоже, что udp-client.Receive - это синхронный вызов, то есть он блокирует код, ожидающий пакет. Игра действительно замерзнет, ​​если у вас не будет 60 пакетов в секунду.

Смежные вопросы