• ActionScript UDP 通讯测试


    其实AS的UDP通讯接口 DatagramSocket出来也蛮久了,今天突然之间头脑发热想研究一下,于是做了个小demo。

    UDP和TCP通讯的不同之处,网上搜索大把,大家可以自己科普一下。

    在AIR中UDP无需些SeverSocket之类的东西,直接就是DatagramSocket与DatagramSocket之间的通讯,

    如果需要接收到别人的信息,那么你就要用到:

    bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
    将此套接字绑定到指定的本地地址和端口。

    启用此 DatagramSocket 对象可接收绑定 IP 地址和端口上的传入数据包。

    如果你只是要发送点什么东西给对方,那么你只需要用到这个:

     send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
    使用 UDP 发送包含 ByteArray 中字节的数据包。

    由于FB的项目设置原因,我把DEMO的接收端和发送端分开写了,代码如下:

    监听方代码:

    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                           xmlns:s="library://ns.adobe.com/flex/spark" 
                           xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="onCreate(event)">
        <fx:Script>
            <![CDATA[
                import mx.events.FlexEvent;
                private var server:DatagramSocket;
                private var socketMap:Dictionary;
                protected function onCreate(event:FlexEvent):void
                {
                    socketMap = new Dictionary();
                    server = new DatagramSocket();
                    server.bind(886,"192.168.3.113");
                    server.addEventListener(DatagramSocketDataEvent.DATA, onData);
                    server.receive();
                }
                
                private function onData(e:DatagramSocketDataEvent):void
                {
                    var msg:String = "Msg from "+e.srcAddress+":"+e.srcPort+ " : "+"length : "+e.data.readShort()+" data: "+e.data.readUTF()+"\n";
                    result.appendText(msg);
                }
                
            ]]>
        </fx:Script>
        <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <s:TextArea x="27" y="10" width="343" height="234" id="result"/>
        
    </s:WindowedApplication>

    推送方代码:

    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                           xmlns:s="library://ns.adobe.com/flex/spark" 
                           xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="onCreate(event)">
        <fx:Declarations>
            <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <fx:Script>
            <![CDATA[
                import mx.events.FlexEvent;
                
                private var udpSocket:DatagramSocket;
                
                
                protected function onCreate(event:FlexEvent):void
                {
                    trace(DatagramSocket.isSupported);
                    udpSocket = new DatagramSocket();
                    udpSocket.addEventListener(Event.CONNECT, onConnected);
                    udpSocket.addEventListener(DatagramSocketDataEvent.DATA, onData);
                    udpSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurity);
                }
                
                private function onSecurity(e:SecurityErrorEvent):void
                {
                    
                }
                
                private function onConnected(e:Event):void
                {
                    
                }
                
                private function onData(e:DatagramSocketDataEvent):void
                {
                    
                }
                
                private function doConnect(event:MouseEvent):void
                {
                    var ba:ByteArray = new ByteArray();
                    ba.writeUTF(input.text);
                    var target:ByteArray = new ByteArray();
                    target.writeShort(ba.length);
                    ba.position=0;
                    target.writeBytes(ba);
                    udpSocket.send(target,0,target.length,"192.168.3.113",886);
                    input.text = "";
                }
            ]]>
        </fx:Script>
        <s:Button id="connectBtn" x="10" y="10" label="CONNECT" click="doConnect(event)"/>
        <s:TextInput x="10" y="39" width="169" height="52" id="input"/>
    </s:WindowedApplication>

    效果图如下:

     

    以上就是全部内容。

    2014/06/26

    用这个可以做局域网游戏,思路如下:

    1 搞个人先建主机,也就是提供一个ServerSocket作为联络服务器

    2 其余个人通过Socket连接到此主机

    3 主机建立所有子机的连接map,每次有连接或者断开连接的时候更新此map并广播新的ip与端口给其他子机

    4 其他自己通过主机的ServerSocket提供的ip和port更新本机的连接池,每次有需要向其他子机广播的时候遍历子机池进行广播

    以上内容昨天已经做了,但是测试有些小问题存在,所以源码不提供,因为上面不是什么很难的东西。

  • 相关阅读:
    序列化二叉树
    把二叉树打印成多行
    按之字形打印数据
    对称的二叉树
    二叉树的下一个结点
    删除链表中重复的结点
    c语言中数组名a和&a详细介绍
    C语言输出格式
    回文素数
    求平均成绩
  • 原文地址:https://www.cnblogs.com/adoontheway/p/3138168.html
Copyright © 2020-2023  润新知