Ip to string
♥0 |
Line 75 |
Modified 2014-11-20 23:20:13 |
MIT License
archived:2017-03-20 01:58:45
ActionScript3 source code
/**
* Copyright Cheshir ( http://wonderfl.net/user/Cheshir )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/jS7A
*/
package {
import flash.net.URLLoader;
import flash.text.TextFieldAutoSize;
import flash.events.IOErrorEvent;
import flash.events.Event;
import flash.system.ApplicationDomain;
import flash.system.SecurityDomain;
import flash.system.LoaderContext;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public static var hello:TextField = new TextField();
private var ipAdress:String;
private var ipCounter:IPCounter;
public function FlashTest() {
// write as3 code here..
// окей, задача стояла преобразовать целочисленный ip в string
// но это не очень интересно и вообще сделано уже тысячу раз
// поэтому получим наш ip преобразуем его в целочисленный, а потом обратно
// получить ip при помощи flash нельзя - политика безопасности
// поэтому задача становится не тривиальной
addChild(hello);
hello.autoSize = TextFieldAutoSize.LEFT;
hello.text = 'hello';
// загрузим по этой ссылке скрипт ПХП
var url:URLRequest = new URLRequest('http://cheshir.zabix.net/test/getip.php');
// URL Loader грузит просто что угодно по ссылке... В отличае от Loader
var ipString:URLLoader = new URLLoader();
// ожидаем загрузку
ipString.addEventListener(Event.COMPLETE, loaded);
ipString.addEventListener(IOErrorEvent.IO_ERROR, error);
// командуем загрузить
ipString.load(url); // load(url, context);
}
private function loaded(e:Event):void{
hello.text = (e.target as URLLoader).data;
ipAdress = hello.text;
var ipInDec:uint = StringIpToInt(ipAdress, false);
var ipRevert:uint = StringIpToInt(ipAdress); // баловство просто
hello.appendText('\n целочисленный десятичный '+ipInDec.toString());
hello.appendText('\n обратно в строку '+IntToString(ipInDec));
hello.appendText('\n перевернутый ip адрес просто потому что можно '+IntToString(ipRevert));
// а потом установим новый ip на сервер
ipCounter.setIp();
}
private function error(e:IOErrorEvent):void {
hello.text = e.text;
}
private function StringIpToInt(ip:String, revert:Boolean=true):uint {
if(ip) // нам сообщили ip
{ // разобъем строку на знаки
var a:Array = ip.split('.');
var result:uint = 0;
if(revert){
for (var i:int=0; i < a.length; i++) // каждому разделу в целочисленном формате соответствует 2 разряда 16-ричной системы
{// 2 разряда 16-ричной системы это 256 в 10-тичной
// пример 109*256^3 + 188*256^2 + 93*256^1 + 159*256^0 где степени - разряды
result += a[i]*Math.pow(256,i); // на самом деле этот код записывает адрес в обратном порядке
}
} else {
hello.appendText('\n ip num length '+a.length+' '+a.toString());
var k:int = 0;
for (var j:int = a.length-1; j >= 0; j--)
{
result += a[j]*Math.pow(256,k);
k++;
}
}
return result;
}
return 0xff; // fail 255
}
private function IntToString(ip:uint):String {
if(ip)
{
var b1:uint = Math.floor( ip / (256*256*256) ); // первое число
var b2:uint = Math.floor( (ip - b1*(256*256*256)) / (256*256) ); // второе число IP адреса
var b3:uint = Math.floor( (ip - b1*(256*256*256) - b2*(256*256)) / 256 );
var b4:uint = ip - b1*(256*256*256) - b2*(256*256) - b3*256;
return b1+'.'+b2+'.'+b3+'.'+b4;
}
return '255'; // fail 255
}
}
}