所采用的编程语言一般可选目前较流行使用的可视化和采用面向对象技术的Microsoft Visual C++ 4.0。Visual C++ 4.0可在Windows 95或Windows NT环境下运行,其开发系统增加了全面集成的基于Windows 的开发工具以及一个基于传统C/C++开发过程的“可视化”用户界面驱动模型。Visual C++ 4.0中的Microsoft基类(MFC,即Microsoft Foundation Class)库是一系列C++类,其中封装着为Microsoft Windows操作系统系列编写应用程序的各种功能 。在有关套接字方面,Visual C++ 4.0对原来的Windows Sockets库函数进行了一系列封装,继而产生了CSocket 、CSocketFile等类,它们封装着有关Socket的各种功能。
Windows Sockets支持两种类型的套接字,即流式套接字(SOCK_STREAM)、和数据报套接字(SOCK_DGRAM)。对于要求精确传输数据的Windows Sockets通信程序,一般采用流式套接字。流式套接字提供了一个面向连接的、可靠的、数据无错的、无重复发送的及按发送顺序接收数据的服务。其内设流量控制,避免数据流超限,同时,数据被看作是字节流,无长度限制。采用流式套接字的应用程序的开发都有其基本步骤,图3是服务器方及客户方通信程序的基本流程及作用关系。
关闭套接字s2 关闭套接字s closesocket ( s2 ) closesocket( s )
关闭套接字s1 closesocket(s1)
图3 服务器及客户机方通信程序基本流程及作用关系
尽管Visual C++ 4.0对原来的Windows Sockets库函数进行了一系列封装,但利用Visual C++ 4.0进行Windows Sockets应用程序开发,其基本流程及作用关系仍然同图3类似。以在Visual C++ 4.0中,经常结合使用CSocket、CSocketFile、CArchive等类开发通信程序的方法为例,阐述其基本步骤,如图4所示。
2、一般情况下,网络通信程序是某应用程序中的一模块。在单独调试网络通信程序时,要尽量与采用该通信模块的其它应用程序开发者约定好,统一采用一种界面形式,即单文档界面SDI、多文档界面MDI和基于对话框界面中的一种(这在使用AppWizard形成项目[Project]文件时有提示),尽管这并非必须,但可使通信模块在移植到所需的应用程序时省时省力,因为Visual C++ 4.0这种可视化语言在给我们提供方便的同时,也给我们带来某些不便,譬如所形成的项目文件中的许多相关文件与所采用的界面形式密切联系,许多消息驱动功能,随所采用的界面形式不同而各异。
当然,也可将通信模块函数化,并形成一个动态连接库文件(DLL文件),供主程序调用。
3、以通信程序作为其中一个模块的应用程序往往不是在等待数据发送或接收完之后再做其它工作,因而在主程序中要采用多线程(Multithreaded)技术。即将数据的发或收,放在一个具有一定优先级(一般宜取较高优先级)的辅助线程中,在数据发或收期间,主程序仍可进行其它工作,譬如利用上一个周期收到的数据绘制曲线 。Visual C++ 4.0中的MFC提供了许多有关启动线程、管理线程、同步化线程、终止线程等功能函数。