网络通信编程教学设计与实现
2011-11-03黑龙江徐鉴
黑龙江 徐鉴
网络通信编程教学设计与实现
黑龙江 徐鉴
交互性是程序设计最大特性,而使用网络通信技术是实现交互性的真正后台工具。本文介绍了VC++实现网络通信编程技术在教学中的实现。它是实现不同客户进行数据交互、网络通信的主要工具,并实现了多客户间的实时聊天。
交互性;VC++;网络通信
概述
网络通信主要是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装、过滤、捕获和分析等处理。
(1)Internet网络模型
网络模型:网络的结构原理和工作原理
OSI参考模型:七层
Internet网络模型:四层
网络协议:指定层上进行数据交换的规则
Internet的网络层协议:IP协议;DNS协议 (辅助协议)
Internet的传输层协议:TCP协议;UDP协议
(2)套接字基础
套接字(Sockets):应用程序和网络协议的接口
TCPSockets:使用TCP协议实现可靠的网络通信
UDPSockets:使用UDP协议实现效率较高的网络通信
(3)Visual C++
VisualC++是一个功能强大的、完全可扩展的Windows开发系统。具有强有力的Internet支持,同时WinSock规范给应用程序开发提供了一套简单的API,并制定了相应规范。
1Socket概论
Socket在计算机中提供了一个通信端口,可以通过它与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,与使用文件句柄相似,可以对Socket句柄进行读、写操作。将Socket翻译为套接字,具体分为以下三种类型:
字节流套接字(StreamSocket) 它提供面向连接的、无差错的、先后顺序一致的、无记录边界和非重复的网络信包传输。是最常用的套接字类型,TCP/IP协议族中的TCP协议使用此类接口。
数据报套接字(DatagramSocket) 它是无连接的服务,它以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。TCP/IP协议族中的UDP协议使用此类接口,原始数据报套接字(RawSocket) 提供对网络下层通讯协议(如IP协议)的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。
图1 面向连接协议的SOCKET编程模型
2 常用Socket API
Socket API函数集
主要的系统调用包括:socket()-创建Socket;bind()-将创建的Socket与本地端口绑定;connect()与accept()-建立Socket连接;listen()-服务器监听是否有连接请求;send()-数据的可控缓冲发送;recv()-可控缓冲接收;closesocket()-关闭Socket。具体如下:
intbind(intsockfd,structsockaddr*my_addr,int addrlen);
intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen);
intlisten(intsockfd,intbacklog);
intaccept(intsockfd,void*addr,int*addrlen);
intclose(sockfd);
int send(int sockfd,const void*msg,int len,int flags);
intrecv(intsockfd,void*buf,int len,unsigned int flags);
3 聊天程序的设计说明
聊天程序是以客户端程序登录服务器,服务器提供服务端连接响应,就可以与登录在同一服务器上的用户交谈。因此,程序要在TCP/IP环境下实现服务器端和客户端两部分程序。
(1)服务器端工作流程:服务器端通过socket()调用创建一个Socket数组后,与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以聊天。
(2)客户端工作流程:客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据。
4 核心代码分析(这里仅给出核心代码,其它的代码可以自行添加)
(1)服务器端代码
voidCChatServerDlg::UpdateUser(CClientSocket*pSocket)//聊天用户Socket信息更新
(2)客户端代码
[1]四维科技,等.VisualC++网络通信编程实用案例精选.人民邮电出版社,2006.
[2]李媛媛.VisualC++网络通信开发入门与编程实践.电子工业出版社,2008.
(作者单位:黑龙江省哈尔滨华夏计算机职业技术学院)
(编辑 王旸)