zoukankan      html  css  js  c++  java
  • 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更新本机的连接池,每次有需要向其他子机广播的时候遍历子机池进行广播

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

  • 相关阅读:
    深入理解 Java中的 流 (Stream)
    算法学习
    编译Opencv的GPU,利用CUDA加速
    【linux】【windows】查看你想访问的电脑Ip 和 端口是否 通畅
    【docker】centos7 上拉取docker镜像,一直拉取不到,报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w
    【mybatis】标签条件中判断入参属性值是否包含子字符串
    【java】Java多线程总结之线程安全队列Queue【转载】
    【spring boot】【redis】spring boot 集成redis的发布订阅机制
    【spring boot】spring boot 基于redis pipeline 管道,批量操作redis命令
    【java】java删除文件delete和deleteOnExit 方法的区别,为什么调用deleteOnExit无效?
  • 原文地址:https://www.cnblogs.com/adoontheway/p/3138168.html
Copyright © 2011-2022 走看看