关于as3 UDP 服务器和客户端

最近由于维护老的as项目,改成UDP协议。


Server:

var server:DatagramSocket = new DatagramSocket();
server.addEventListener(DatagramSocketDataEvent.DATA,OnReadDataFromServer);
server.bind(54000);
server.receive();//如果要接收广播,必须开启这个

function OnReadDataFromServer(e:DatagramSocketDataEvent):void{
	var str:String = e.data.readUTFBytes(e.data.length);
	trace(str);
}//发送广播

var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(JSON.stringify(data));
server.send(bytes,0,0,"192.168.1.0" ,54000);

注意,上面的发送广播代码只能发送给指定广播地址,之前接触过air的网卡获取,其实网卡里就有这个广播地址。

var _broadcasts:Array = [];//用于存储广播地址
var netWorkVec:Vector<NetworkInterface>=NetworkInfo.networkInfo.findInterfaces(); 
for (var i:* in netWorkVec){
     var addressVec:Vector.<InterfaceAddress> = new Vector.<InterfaceAddress>();
     addressVec = netWorkVec[0].addresses;
     for (var j:* in addressVec)
	{
	if (_broadcasts.indexOf(addressVec[j].broadcast) == -1)
	   {
		_broadcasts.push(addressVec[j].broadcast);
	   }
					
	}
}

以上代码通过读取网卡信息,将广播地址都存起来,因此,发送广播的代码稍微改进下

var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(JSON.stringify(data));
for each (var broadcast:String in _broadcasts){
	server.send(bytes, 0, 0, broadcast, 54000);
}


网站导航