2015-04-27 164 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

評論代碼是什麼使崩潰;當我取消註釋StartClient函數中的while循環時,它首先崩潰,儘管它是while循環使它崩潰,所以我評論它,並在更新函數中再次寫入,所以當我在startclient()中聲明clientstarted爲true時更新函數將運行代碼,但也使它崩潰,所以我不能真正猜測是什麼讓它崩潰(當我的意思是崩潰我的意思是在Windows中使編輯器不響應,並最終關閉本身,並在Android上關閉應用程序) 。如果它有幫助,這裏是日誌文件 - http://pastebin.com/JZ1kY62a – 404ErrorFree

回答

0

while(true)StartClient()的確會使編輯器/應用程序被凍結,因爲StartClient()不叫作爲協程,所以產量不返回到Unity引擎,你的程序在同時永遠困。

因此還有另一件事。它看起來像udp-client.Receive是一個同步調用,這意味着它阻止了等待數據包的代碼。除非每秒鐘有60個數據包,否則遊戲確實會凍結。