文档介绍:用VC实现简单的C/S结构的聊天程序设计者:肖小彬QQ:273443743摘要本课程设计运用套接字进行简单的数据传送,当服务器启动之后,它启动一个监听线程,该线程用于获取客户机的连接请求,如果有请求,就启动一个专门接受客户机发送的数据的接受线程。当客户机第一次发送数据时,该数据为用户名和密码,服务器验证并通过后,就会启动聊天功能。与此项对应的,当客户机启动后,他会首先等待用户输入要登陆的服务器的IP地址、用户名和密码,当用户确认后,客户机会将用户名和密码传送到指定IP的服务器,并请求服务器验证,服务器验证通过后,会返回一个特定的信息。该信息标识用户是否通过验证,如果通过验证,则客户机聊天功能开启。在课程设计中,系统开发平台为Windows2000,程序设计设计语言采用VisualC++,程序运行平台为Windows98/2000/XP。对于。。。采用了。。。法进行计算,在程序设计中,采用了结构化与面向对象两种解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。关键词TCP/IP协议;Socket;MFCSocket编程;客户机/服务器模式C++;聊天程序;数据通信1引言由于时间紧迫,本课程设计只支持一个客户的程序设计[1]。,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法[2]。在结构化程序设计中关键是如何将问题域中的行为(即操作)抽取出来,作为C++程序中的函数。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。2系统总框图本课程设计只支持一个客户的程序设计,它的系统总框图如图2-1所示。图2-,它最重要的任务就是创建一个套接字,在设计好网络地址并绑后,将套接字句柄交给监听线程去完成,并设置变量为已启动状态,,服务器就会调用Listen函数进行监听,ept函数来接收连接请求,,它就会不停的[判断全局变量ChatInfo中是否有当前用户的消息需要传递,如果有则发送并置变量ChatInfo为空,以便为存储新的消息做准备,,接收线程则从套接字驱除该数据并存储在一个临时变量中,供系统信息列表进行显示;需要注意的是:,为了线程之间通信的方便,特定义了如下全局函数:CSstringChatInfo;//消息内容不能为空,将会被Sendthread线程截获并发送出去BOOLChatEnable;//聊天功能开启时是FALSE,当客户名称与密码验证成功后,将会被置为TURE,这时就可以随便发送消息CStringListInfo;//需示的系统信息,如果不为空,将会被系统显示函数获取并显示出来(4)常用的流输入/输出函数输入、输出流类库函数的数量非常多,相对常用的如表3-1所示。表3-1常用输入、输出流类库函数函数声明功能声明Socket();Sock()函数可以创建一个socket号,若调用成功,函数返回一个socket号,否则返回-1bind();bind()函数的作用是将一个socket号与本地进程捆绑在一起。对于面向连接的客户端,调用connect()时将自动绑定本地进程。Connect();连接远程主机。它接受的参数和返回值与bind()完全相同,Listen()Listen()函数用来监听客户机的连接,-1所示图4--2所示图4--3所示图4--4所示图4--5所示图4-5客户端收到消息图5结束语以上两个程序中面向对象的程序的优点是显而易见的。首先程序2避免了使用全局变量,而在程序1中函数select_menu()也同样可以访问全局变量quantity和amount(当然为了避免这种情况发生我们也可以利用文件模块实现封装与信息隐藏)。附录1:面向对象设计源程序清单//程序名称: