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

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

转载于:https://www.cnblogs.com/adoontheway/archive/2013/06/15/3138168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值