zoukankan      html  css  js  c++  java
  • [ActionScript 3.0] UDP通信

    package com.controls.socket
    {
        import flash.events.DatagramSocketDataEvent;
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.net.DatagramSocket;
        import flash.utils.ByteArray;
    
        /**
         * @author: Frost.Yen
         * @E-mail: 871979853@qq.com
         * @create: 2017-11-25 下午2:55:53
         *
         */
        public class DatagramSocketManager extends EventDispatcher
        {
            private var _datagramSocket:DatagramSocket = new DatagramSocket();
            private static var _instance:DatagramSocketManager;
            public var data:String;
            public function DatagramSocketManager(s:S)
            {
            }
            public static function getInstance():DatagramSocketManager
            {
                if(!_instance){
                    _instance = new DatagramSocketManager(new S());
                }
                return _instance;
            }
            
            public function send(msg:Object,address:String,port:int):void{
                //Create a message in a ByteArray
                var data:ByteArray = new ByteArray();
                
                if(msg is String){
                    data.writeUTFBytes( msg as String );
                }else{
                    data.writeUTFBytes( JSON.stringify(msg) );
                }
                //Send a datagram to the target
                try
                {
                    _datagramSocket.send( data, 0, 0, address, port); 
                    log( "Sent message to " + address + ":" +port);
                    
                }
                catch ( error:Error )
                {
                    log( error.message );
                }
            }
            
            public function bind(port:int,ip:String):void
            {
                if( _datagramSocket.bound ) 
                {
                    _datagramSocket.close();
                    _datagramSocket = new DatagramSocket();
                    
                }
                _datagramSocket.bind(port, ip );
                _datagramSocket.addEventListener( DatagramSocketDataEvent.DATA, dataReceived );
                _datagramSocket.receive();
                log( "Bound to: " + _datagramSocket.localAddress + ":" + _datagramSocket.localPort );
            }
            private function dataReceived( event:DatagramSocketDataEvent ):void
            {
                //Read the data from the datagram
                data = event.data.readUTFBytes( event.data.bytesAvailable ) ;
                log("Received from " + event.srcAddress + ":" + event.srcPort + "> " + data);
                
                this.dispatchEvent(new Event(Event.CHANGE));
            }
            
            public function log(message:String):void
            {
                trace(message);
            }
        }
    }
    class S{};

    用法:

    DatagramSocketManager.getInstance().bind(8090,"127.0.0.1");
    DatagramSocketManager.getInstance().addEventListener(Event.CHANGE,onGetUDPMsg);
    
    private function onGetUDPMsg(e:Event):void{
        trace("接收到服务器发送过来的消息",DatagramSocketManager.getInstance().data);
        try
        {
            var data:Object = JSON.parse(DatagramSocketManager.getInstance().data);
        } 
        catch(error:Error) 
        {
                    
        }
    }
  • 相关阅读:
    python之生成器
    flask_sqlalchemy filter 和filter_by的区别
    Linux 更新python至2.7后ImportError: No module named _ssl
    Linux pip 安装模块时,一直黄字错误:Could not find a version that satisfies the requirement
    Linux 创建python虚拟环境
    python 需求文件requirements.txt的创建及使用
    wget http://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz 下载时报错 ssl is required 解决办法
    结合daterangepicker实现Datatables表格带参数查询
    datatable 的ajax修改参数,post可以传参处理
    datatables 参数详解(转)
  • 原文地址:https://www.cnblogs.com/frost-yen/p/7903997.html
Copyright © 2011-2022 走看看