基于TCP的socket编程的聊天工具实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

摘要沟通是人类社会里不可或缺的一种行为,在信息发达的今天,沟通的方式多种多样,而网络聊天作为一种新的沟通方式,例如MSN、QQ,在现实生活里发挥着重要的作用,网络聊天,已经成为人们生活中一种重要的行为。学习聊天程序的编程,加深对VC网络技术的认识,对于我们来说也是有着十分重要的意义。理解并掌握对话框编程,学习多种技术的融合,从而提高我们的编程水平。聊天程序一般由两大部分组成:服务器端聊天程序和客户端聊天程序。服务器端聊天程序负责接收来自客户端的聊天信息,并根据客户端的要求把这些信息发到一个或多个客户中。客户聊天程序则负责建立和维护与服务器端的连接,向服务器发送本客户的聊天内容,同时从服务器接受对方的响应。功能要求如下:客户端部分:手动输入服务器端IP地址和端口号进行连接发送消息给服务器端并显示服务器端回传的消息服务器端部分:手动建立服务器端与客户端的连接请求接收所有用户发送的消息向所有在线用户群发消息11目录1方案比较与选择························································································11.1系统分析与设计........................................................................................................................11.2程序方案....................................................................................................................................21.2.1方案一:基于TCP的socket编程....................................................................................21.2.2方案二:基于UDP(面向无连接)的socket程序........................................................31.3方案比较结果............................................................................................................................52程序的编程与实现····················································································62.1项目创建....................................................................................................................................62.2界面设计....................................................................................................................................62.3代码编写....................................................................................................................................62.3.1CClientSocket......................................................................................................................72.3.2CServerSocket...................................................................................................................172.3.3CMessg..............................................................................................................................192.3.4CChatDlg...........................................................................................................................213程序的运行与结果··················································································413.1使用说明..................................................................................................................................413.2程序功能演示..........................................................................................................................414讨论及进一步研究建议···········································································445课程设计心得·························································································456Abstract································································································467参考文献································································································4711方案比较与选择1.1系统分析与设计系统构架方式如下图所示:设计出一个完整的网络聊天程序,使之实现以上基本要求。1.服务端需要完成的三件事1)在特定端口等待连接请求,并需要维护一个客户连接表,已记录所有成功连接。2)及时接受消息,然后转发到客户连接。3)监控连接状态,客户离开或故障时从列表中删除相应表项,并及时更新连接表。2.客户端需要完成的三件事1)建立与维护服务器的连接,并随时监测连接状态。2)把用户输入的信息及时发送到服务端,同时准备好接受,并显示信息。3)在用户退出时关闭连接并保存聊天记录。21.2程序方案1.2.1方案一:基于TCP的socket编程TCP(TransmissionControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。服务器端程序流程如下:1)创建套接字(socket);2)将套接字绑定到一个本地地址和端口上(bind);3)将套接字设为监听模式,准备接受客户请求(listen);4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept);5)用返回的套接字和客户端进行通信(send/recv);6)返回,等待另一客户请求;7)关闭套接字;客户端程序流程如下:1)创建套接字(socket);2)向服务器发出连接请求(connect);3)和服务器端进行通信(send/recv);4)关闭套接字。在服务器端,当调用accept函数时,程序就会等待,等待客户调用connect函数发出连接请求,然后服务器端接受该请求,于是双方就建立了连接。之后,服务器端和客户端就可以利用send和recv函数进行通信了。因为服务器需要接受客户端的请求,所以必须告诉本地主机它打算在哪个IP地址和哪个端口上等待客户要求,因此必须调用bind函数来实现这一功能。而对客户端来说,当它发起连接请求,服务器端接受请求后,在服务端就保存了改客户端的IP地址和端口的信息。这样,对服务器端来说,一旦建立连接之后,实际上它已经保存了客户端的IP地址和端口号的信息,就可以利用所返回的套接字调用send/recv函数与客户端进行通信。程序流程图如下:31.2.2方案二:基于UDP(面向无连接)的socket程序UDP(UserDataProtocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境服务器端也叫接收端,对于基于UDP(面向无连接)的套接字编程来说,它的服务器端和客户端这种概念不是很强化,我们也可以把服务器端,即先启动的一端称为接收端,发送数据的一端称为发送端,也称为客户端。服务端程序编写流程如下:1)创建套接字(socket);2)将套接字绑定到一个本地地址和端口上(bind);3)等待接受数据(recvfrom);4)关闭套接字。4虽然面向无连接的socket编程无须建立连接,但是为了完成这次通信,对于接受端来说,它必须先启动以接受客户端发送的数据,因此接收端必须告诉主机它是在哪个地址和端口上等待数据的到来,接收端(服务器端)必须调用bind函数将套接字绑定到一个本地地址和端口上。客户端程序编写流程如下:1)创建套接字(socket);2)向服务器发送数据(sengto);3)关闭套接字。在UDP的套接字编程时,利用的是sendto和recvfrom这两个函数实现数据的发送和接收,而基于TCP的套接字编程时,发送数据是调用send函数,接受数据调用recv函数。程序流程图如下:51.3方案比较结果TCP与UDP最基本的区别在于基于连接与无连接,相比之下,第一种方案对系统的要求以及数据量都比较大,但是保证数据的正确性与数据顺序,在传输大量数据的时候具有更高的可靠性。至于第二种方案的优点在于传输的速度快,程序结构精简。总的来说,我认为TCP协议更能满足目前各行业对远程数据传输的要求,它提供更稳定更便利的传输通道,满足了对安全性的要求以及远程数据传输的要求。所以我们小组选择方案一。62程序的编程与实现2.1项目创建使用VisualC++6.0创建一个基于对话框的MFCAppWizard(exe)项目。1)从菜单栏中选择“文件”,然后“新建”,弹出“新建”对话框。2)在对话框中单击“工程”选项卡,选中MFCAppWizard(exe),并设置工程名称为“Chat”,单击确定。3)在MFCAppWizard向导界面中,选择“Dialogbased”,建立基于对话框的应用程序。4)在MFCAppWizard向导界面中,选择“WindowsSockets”,其他默认。5)单击“完成”,完成工程的创建。2.2界面设计打开IDD_CHAT_DIALOG对话框,设计对话框的界面,添加控件。完成后对话框如下图:添加控件后,打开ClassWizard,为

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功