最近学习 PPC 下的 Socket 编程,基本是按以下步骤进行程序调试
1 、在 Windows XP 下编写服务器端 / 客户端,直至测试程序通过。通过这个过程验证 winsock 的使用 (API 和 MFC 的包装类 ) ,确保语句代码不出错,当然选用的是 wince4.2 兼容的 API (比如只使用 seledt I/O 模型)。调试时将开发机同时作为服务器和客户端进行测试,也使用 Virtual PC 模拟一个具有固定 ip 的客户机进行调试。
2 、客户端移植到 win ce ,与 XP 下的服务器端进行联合测试,直至程序通过。 win ce 环境使用的 PPC 模拟器,主机是内网 IP ,外网无法访问。
使用 TCP 套接字的程序顺利通过了验证,第 1 步和第 2 步的运行都正常,这个过程不需要对 PPC 模拟器的环境进行任何配置。但在做 UDP 套接字程序的调试时,第 1 步 XP 下的服务器端 / 客户端能正常运行,但第 2 步将客户端移植到 win ce 下时,发现作为服务端的 PC 机始终无法收到模拟器发出的 UDP 数据包。也不知道问题出在哪里,无奈之下,只有一步步测试。
首先使用简单的 winsock API 分别写一个服务端和客户端,服务端和客户端都运行于 win ce 平台,使用 UDP 套接字连接,来测试在模拟器同时充当服务端和客户端时,服务端是否能收到客户端发出的 UDP 数据包,以验证基本代码使用的正确与否(这也是挺无奈的测试,主要是担心是由于代码写错了,而不是环境的原因导致 PC 不能收到模拟器的 UDP 数据包)。测试结果是正常,在同一台模拟器上,服务端能够收到客户端发出的 UDP 数据包。
按照这个结果, PC 不能收到模拟器的 UDP 数据包应该是由于模拟器无法访问到 PC 机的 ip 而引起,应该是网络环境的设置问题。在网上搜索资料,找到了子弹头的关于“ 配置 Pocket PC 2003 SE设备仿真器的网络设置 ”的说明,主要是安装虚拟网卡,然后将模拟器的“ NE2000 PCMCIA ”网卡绑定到虚拟网卡,建立一个网络环境。这样模拟器应该能够访问到 PC 的 ip 。照着实施了一遍,发现有些地方情况不同,下面把我的配置过程完整介绍一下:
3.1 下载并安装虚拟网卡驱动程序( http://www.microsoft.com/downloads/details.aspx?FamilyID=dc8332d6-565f-4a57-be8c-1d4718d3af65&DisplayLang=en )。以我的理解来看,这里安装的虚拟网卡和通常使用的虚拟光驱软件是不同的,它并不是虚拟出一块网卡出来,安装后在查看系统的硬件也未发现并未添加一块网卡。它应该是专用于模拟器,实现将模拟器的网卡和真实网卡进行绑定的一个中间驱动。
3.2 绑定模拟器的网卡。启动模拟器,然后从模拟器的文件菜单中选择配置,在 “ 仿真程序属性 ” 对话框中切换到“网络”页,然后勾选 “ 启用 NE2000 PCMCIA 网络适配器并绑定到 ” 选项。在系统中只有一块真实网卡的情况下,这里并不能选择具体绑定到哪一个网卡,也印证了前面的猜测,虚拟网卡并不是象虚拟光驱那样为系统添加一个虚拟的硬件。
3.3 配置模拟器网卡的参数。在模拟器内选择:开始-〉设置-〉连接-〉网卡,进入“配置网络适配器”。选择我的网卡连接到“默认 Internet 配置”,然后再选择 “NE2000 兼容 Ethernet 驱动程序 ” ,对网卡的 ip 、网关、 dns 进行具体配置。
3.4 配置完成后,软重置模拟器,接下来就可以在主机中使用 ping 命令来测试与模拟器连通情况。可以更改模拟器的 ip ,更改后要软重置模拟器才能生效。
整个过程只需要上面这四步即可,不需要设置传输方式等操作。完成配置后,模拟器就有了一个固定 ip ,局域网内的机器也可以访问到模拟器的这个 ip 。通过这个 ip ,只要模拟器的网关和 dns 配置正确 ( 设置成和主机一样 ) ,就可以直接上网,而不再需要借助 ActiveSync 了。
通过以上的配置,作为服务端的主机可以正常收到作为客户端的 PPC 模拟器发出的 UDP 数据包。
绑定绑定模拟器的网卡到真实网卡后,每次启动模拟器时,都会弹出一个提示,“要启用 NE2000 PCMCIA 网卡的仿真吗?这将使在仿真程序中运行的代码能够访问此网络”,点是即可。
现在设备已经俱全,一共有 3 台 pda( 一台没有上网功能,一台支持 CDMA 1X ,一台支持 GPRS ),也配好了 cmwap 、 cmnet 、 cdma 1x 三张上网卡,一切俱备,后面就等着开通一个外网 ip ,这样的话真实环境就全部建起来了。但我还是希望能在模拟器上完成日常的调试,因为这个最方便,不 用到处去插线,拿触笔点小小的 pda 屏幕。通过上面调试 TCP 和 UDP 套接字的过程我也发现在模拟器环境下调试 wince 网络程序也是完全可能的。关于程 序性能、真实网络环境的速度等可以在模拟器下调试通过后再集中放到实机上测试。