我正在尝试制作一个网络脚本,它将查找局域网上的所有游戏服务器,但我遇到了一些麻烦;导入System.Net.Sockets;
导入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 selected:boolean = false;
private var udp_received_message:String;
function StartServer(){
udp_server = new UdpClient(udp_port, AddressFamily.InterNetwork);
var udp_endpoint:IPEndPoint = new IPEndPoint(udp_broadcast_ip, udp_port);
udp_server.Connect (udp_endpoint);
InvokeRepeating("StartBroadcastUDP", 0.0,0.3);
}
function StartClient(){
if(udp_client == null){
udp_client = new UdpClient(udp_port);
udp_client.BeginReceive(new AsyncCallback(StartReceiveUDP), null);
Debug.Log("Searching for udp");
}
}
function StartBroadcastUDP(){
var udp_broadcast_message:String = "GAME SERVER";
if(udp_broadcast_message != ""){
udp_server.Send(Encoding.ASCII.GetBytes (udp_broadcast_message), udp_broadcast_message.Length);
}
}
function StartReceiveUDP(result:IAsyncResult){
Debug.Log("Searching for udp");
var udp_endpoint:IPEndPoint = new IPEndPoint(IPAddress.Any, udp_port);
var udp_received_message_byte:byte[];
if(udp_client != null){
udp_received_message_byte = udp_client.EndReceive(result, udp_endpoint);
}else{
return;
}
udp_client.BeginReceive(new AsyncCallback(StartReceiveUDP), null);
udp_received_message = Encoding.ASCII.GetString(udp_received_message_byte);
Debug.Log("Searching for udp");
}
function Update(){
if(udp_received_message != null){
Debug.Log("Received Message: " + udp_received_message);
}
}
function OnGUI(){
if(!selected){
if(GUI.Button(Rect(0, 0, 50, 50), "Server")){
StartServer();
selected = true;
}else if(GUI.Button(Rect(50, 0, 50, 50), "Client")){
StartClient();
selected = true;
}
}
}它看起来当我开始接收udp (Startclient中的BeginReceive)时,它只是计划没有id。为了确认这一点,我添加了几个debug.logs,但仍然一无所获
发布于 2015-04-26 00:37:48
不幸的是,异步调用在Unity中是有问题的。您可以在线程中使用阻塞调用,或者在主线程中使用非阻塞调用(在Update方法中)。
https://stackoverflow.com/questions/29866789
复制相似问题