首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unity udp未接收

unity udp未接收
EN

Stack Overflow用户
提问于 2015-04-25 22:59:11
回答 1查看 328关注 0票数 1

我正在尝试制作一个网络脚本,它将查找局域网上的所有游戏服务器,但我遇到了一些麻烦;导入System.Net.Sockets;

导入System.Net.Sockets;

代码语言:javascript
复制
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,但仍然一无所获

EN

回答 1

Stack Overflow用户

发布于 2015-04-26 00:37:48

不幸的是,异步调用在Unity中是有问题的。您可以在线程中使用阻塞调用,或者在主线程中使用非阻塞调用(在Update方法中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29866789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档