Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 在AS3中搜索联机套接字_Sockets_Actionscript 3 - Fatal编程技术网

Sockets 在AS3中搜索联机套接字

Sockets 在AS3中搜索联机套接字,sockets,actionscript-3,Sockets,Actionscript 3,平台:安卓AIR 我正在尝试开发一种快速搜索算法,用于在我的局域网上搜索在线套接字 第一个算法是在我的网关上创建255个套接字 例如: 192.168.1.1是我的网关 因此,在搜索在线套接字时,我必须创建套接字并将192.168.1.0连接到192.168.1.254。这是快速搜索,但它会导致滞后,因为它消耗了大量的内存。即使在我处理了无法连接的套接字之后。所有联机的套接字都存储在向量数组中 我通过以下方式处理失败的套接字: 正在从套接字中删除所有侦听器 合上插座 将套接字设置为null 调用

平台:安卓AIR

我正在尝试开发一种快速搜索算法,用于在我的局域网上搜索在线套接字

第一个算法是在我的网关上创建255个套接字

例如:

192.168.1.1是我的网关

因此,在搜索在线套接字时,我必须创建套接字并将192.168.1.0连接到192.168.1.254。这是快速搜索,但它会导致滞后,因为它消耗了大量的内存。即使在我处理了无法连接的套接字之后。所有联机的套接字都存储在向量数组中

我通过以下方式处理失败的套接字:

  • 正在从套接字中删除所有侦听器
  • 合上插座
  • 将套接字设置为null
  • 调用
    System.gc()
    强制垃圾收集
  • 第二种算法只使用1个套接字,它将从192.168.1.0开始连接,并递增到255,直到找到一个在线套接字。当套接字无法连接时,它将根据超时情况转到下一个ip

    var ip = '192.168.1';
    var ipCounter = 0;
    
    socket.addEventListener(Event.CONNECT, connectHandler);
    socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    
    socket.timeout = 50;
    
    function connectHandler(e:Event):void{
    
    }
    
    function ioErrorHandler(e:IOErrorEvent):void{
        ipCounter += 1;
        if(ipCounter > 255){
            ipCounter = 0;
        }
        socket.connect(ip+'.'+ipCounter.toString(), 18765);
    }
    
    socket.connect(ip+'.'+ipCounter.toString(), 18765);
    
    这是可行的,但是速度很慢


    如何改进搜索算法?

    我终于找到了一个更快的解决方案

    我使用了
    DatagramSocket
    (UPD)来代替搜索

    这是因为它不必连接到套接字服务器来发送数据

    datagramSocket.send(字节数组、起始、长度、ip、端口)