基于wince的嵌入式网络通信系统设计
引言
由于网络通讯的快速、便捷等优点,其在嵌入式系统中应用越来越多。windows环境下进行网络通信最基本的实现方法是应用windows sockets实现;visual studio开发环境提供了大量基于windows sockets的通讯api函数,如winsockapi、wininetapi和isapi,将这些api函数与mfc集成在一起,使网络通信的开发周期越来越短、编程方法越来越简单。本文重点介绍了使用mfc的csocket类编写pc端网络通信客户端的的实现方法,并介绍了如何完成windows ce操作系统下网络通讯程序的设计。
1、csocket编程
mfc将复杂的winsock api函数封装到相关类,使得网络编程更容易、简单。为了给编程人员提供更加方便的接口,mfc提供了csocket类,它是由casyncsocket类继承下来的,提供了比casyncsocket类更高层、更易于编程操作的winsock api接口。使用csocket对象涉及carchive和csocketfile 类对象。csocket编程步骤:(1)构造一个csocket对象;(2)使用create()成员函数生成一个socket对象。设计客户端程序时,create()函数一般情况下应该使用默认参数。对于服务端程序,在本文由论文联盟http://收集整理调用create时须指定一个端口。(3)对于客户方套接字,则调用casyncsocket::connect()函数与服务端套接字进行连接;对于服务方套接字,则调用casyncsocket::listen()开始监听客户端的连接请求,收到连接请求后,调用casyncsocket::accept()函数接受请求,建立连接。WWw.133229.COm(4)产生一个csocketfile对象,将它与csocket对象关联。(5)为接收和发送数据各产生一个carchive 对象,将它们与csocketfile对象关联。(6)使用carchive对象的read()、write()等函数完成传送数据。(7)通讯完毕,销毁carchive、csocketfile和csocket对象。
2、网络客户端程序设计
2.1 pc机网络通讯客户端设计
(1)启动visual studio 2010,创建一个基于对话框架的mfc应用程序项目,将该项目命名为"test";在mfc向导中选中windows 套接字;
(2)在对话框中添加按钮控件与编辑框控件;
(3)使用类向导为应用程序的按钮添加鼠标单击消息响应函数;
(4)使用类向导在应用程序中定义新类cnewsocket,其基类选择为csocket;重载newsocket类的onaccept()、onreceive()、onclose()函数;增加公有变量ctestdlg *m_dlg; intm_status并添加成员函数void getdlg(ctestdlg *dlg);
(5)为窗口类testdlg添加5个公有成员变量:csocketfile *m_file;carchive *m_arout;carchive *m_arin;cnewsocket* m_serversocket;cnewsocket* m_clientsocket;并添加公有4个成员函数:voidsocketreset();void onclose();void onreceive();void onaccept();
(6)编译
2.2 嵌入式wince系统网络通讯客户端设计
对于嵌入式wince系统客户端,其源代码与pc机源代码基本一样,只有步骤(1)不同,其他步骤与pc过程相同。步骤(1):启动visual studio 2005,创建一个新项目,project types选择“smart device”,然后templates选择“mfc smart device application”,将该项目命名为"test";在mfc向导中选中windows 套接字。
3、系统测试
将编译好的嵌入式wince系统网络通讯客户端下载到arm开发板nandflash中,利用交叉网线连接pc机与arm开发板。待连接成功后,通过网络链接属性查看双方ip地址。启动客户端,设置好需要链接的ip地址,将pc机设置为服务器,arm端设置为客户端,启动连接。通讯连接成功后,通讯结果如图1所示。
(a)pc机客户端 (b)嵌入式客户端
图1 测试结果
4、结论
文中主要介绍了mfc中csocket类编程思想与设计方法,并通过csocket类实现了pc-arm网络通信客户端设计。arm平台为ok6410开发板,采用wince操作系统。pc与arm通信采用客户/服务器通信模型,pc与arm均可选择为服务器,通过实例完成了pc机与嵌入式系统的网络通讯客户端设计。该设计方法的缺点在于通讯数据较为单一,无法实现图片的传输等。