图1 电子教室图
4. 项目实现
4.1 信息传递
网络程序的实现可以有多种方式,Windows Sockets 就是其中的一种。Socket是连接应用程序与网络驱动程序的桥梁,需在应用程序中创建,通过绑定操作与驱动程序建立联系。然后,应用程序可以通过创建的Socket,向网络发送、接收数据。网络应用程序就是这样通过Socket进行数据的发送与接收的[6]。
具体步骤:首先通常就是创建一个Socket,并且需要设置两个重要参数,IP地址、端口号;其次要确定程序要与网上的哪台计算机通话;最后,在多任务的系统中,该台计算机上可能会有多个进程在工作,必须指出要与哪个进程通信。前者可以通过IP地址来确定,而后者则由端口号来确定的[7]。
服务端向客户端发送聊天请求,客户端同意后,输入服务端姓名,就可以开始聊天了。在聊天的过程中,输入“exit”就退出聊天模块,返回服务端主界面。
如图2:
图2 信息传递流程图
4.2 文件传输
4.2.1 实现步骤
在服务端和客户端分别建立套接字,并绑定到固定端口上,同时对Winsock.dll进行初始化,并分配必要的资源。服务端调用Winsock的listen函数,实现套接字的侦听,等待客户端的连接请求;客户端调用Winsock的connect函数请求连接。先启动服务器,则等待客户端连接,若先启动客户端,则客户端要对服务端进行多次连接。在连接的过程中如有异常应有相应提示信息。连接成果后,由服务端向客户端做相应的操作。如果客户端同意,则继续操作[8]。
传送文件时,服务端必须先得到客户端的同意,在向客户端传送文件的信息,如大小,文件名。之后通过分块进行发送。在发送的过程中要注意是否有丢包,并进行检测,如有则有提示信息。在传送的过程中要随时显示传送的进度及接受读写等信息。文件发送完毕退出相应程序,返回主目录,进行其他的操作[9]。
4.2.2 模块具体实现
文件发送模块较为复杂,首先要得到要发送文件的路径,以只读的方式打开,在通过函数求得文件长度,并将长度发送给客户端(len_file统计文本的数据长度,再把分好的总块数发送给客户端,准备开始发送[10])。
两端都以同样的大小进行分块,通过文件的块数来控制文件发送的循环次数,每次读取一定长度,在发送过去,为的是保证传送与接收的同步性,起初并没有注意到这点,因此在局域网内传送大文件时,就会出现不同步的现象。同时文件传输分为服务器到客户端和客户端到服务器,所以代码中两部分的代码会交互出现[11]。流程图如下: