15
2015
07

air获取局域网ip

问题:如何用as做一个局域网聊天的应用?纯局域网,不联网也能用。

air中有Socket,ServerSocket,一台计算机作为服务器,创建ServerSocket,侦听本地的一个端口,另一台计算机作为客户端,创建Socket,连接到服务器。然后就可以进行通信了。

Socket要连接到服务器,需要知道服务器的地址(ip),怎么才能知道服务器的地址呢。

首先,要能获取到局域网内所有的计算机的ip,然后尝试连接每一个ip,服务器收到消息会有响应,这样,连接就建立起来了。

问题又来了:怎么获取局域网内所有的计算机的ip。

翻了好多资料,发现as本身并没有提供方法,用NetworkInfo倒是可以获取本机的ip。参考:http://bbs.9ria.com/forum.php?mod=viewthread&tid=174904&highlight=networkInfo

as实现不了的功能,可以借助ane,用c++之类的来获取,这个方法完全可行,可惜本人不会c++,看了好多资料,也不知道c++改怎么实现这个功能。

as还可以调用exe,变相的可以使用.bat,而用.bat来获取局域网计算机ip还是很方便的。批处理获取局域网ip可参考:http://jingyan.baidu.com/article/54b6b9c0348e432d583b47c1.html

as(air)中使用NativeProcess可以调用exe程序,调用bat文件,是通过调用cmd.exe,然后给cmd.exe传参数实现的。具体参考:http://bbs.9ria.com/thread-97883-1-1.html

用NativeProcess之前需要先判断一下是否支持,如果NativeProcess.isSupported一直是false的话,看这里:http://bbs.9ria.com/thread-110144-1-1.html

需要注意的是,调用cmd.exe的时候,并不会弹出运行框(那个黑底白字的窗口),所以不要试图只写个pause来调试。

同样,既然不会弹出窗口,bat的最后也不要写pause,否则侦听不到NativeProcessExitEvent事件,因为根本没有退出,想要知道什么时候执行完成,还得自己加输出来判断。

ProgressEvent.STANDARD_OUTPUT_DATA中能够得到bat文件中的输出内容(就是那个黑底白字的窗口中显示的内容),这样我们就可以获取这些内容,再从中提取需要的信息了。

cmd默认输出的是ANSI编码的,as中直接toString()会是乱码,具体解决方法参见:http://bbs.9ria.com/thread-160715-1-1.html,就是用readMultiByte来读取,指定字符集,我的指定为"gb2312"就可以,简体中文可能都是这个吧(不了解)。

这样我们就得到了通过bat获取到的局域网计算机ip信息,里边会有一些其他的信息,所以还需要提取一下ip,具体如何提取出,仁者见仁智者见智了。我用的方法是在bat里边输出ip之前和之后,各加一个标志,然后提取标志之间的字符串就可以了。


封装了一下,需要建立一个air for desktop项目,并且发布为exe,不能是air,app.xml中需要加入extendedDesktop,groupIp.bat放在swf的同级目录下,Hip使用方法如下:

var hip:Hip = new Hip();
			
var obj:Object = hip.getLocalIp();
trace("本机ip:" + obj.address);
			
hip.getGroupIp(getGroupIpSuccess);

function getGroupIpSuccess(groupIpArr:Array):void 
{
    trace("局域网ip:");
    for (var i:int = 0; i < groupIpArr.length;i++ ) {
	trace(groupIpArr[i]);
    }			
}

我试了试,通过NativeProcessStartupInfo的arguments来给cmd.exe传参数,代替bat文件,没有成功。但我坚信此方法可行。


cmd很强大,如此一来,可以做很多东西。虽然实际项目会有问题,但是平时自己做一些东西还是不错的,毕竟比学习用c、c++写ane要简单的多。


源码打包下载


« 上一篇下一篇 »

相关文章:

解九连环  (2016-12-1 20:58:11)

小文件打包  (2016-8-18 16:43:38)

txt批量转为utf8编码  (2016-4-13 11:48:13)

air透明窗口  (2015-8-20 17:32:20)

air操作数据库-如何使用同步模式  (2015-8-13 11:36:56)

批量修改文件名  (2015-8-6 11:34:55)

flex开发air程序下方多一个灰色的条  (2015-6-1 9:38:53)

ane入门  (2015-2-2 10:30:8)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。