- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于TCP的socket编程的聊天工具实现.doc
摘要
沟通是人类社会里不可或缺的一种行为,在信息发达的今天,沟通的方式多种多样,而网络聊天作为一种新的沟通方式,例如MSN、QQ,在现实生活里发挥着重要的作用,网络聊天,已经成为人们生活中一种重要的行为。
学习聊天程序的编程,加深对VC网络技术的认识,对于我们来说也是有着十分重要的意义。理解并掌握对话框编程,学习多种技术的融合,从而提高我们的编程水平。
聊天程序一般由两大部分组成:服务器端聊天程序和客户端聊天程序。服务器端聊天程序负责接收来自客户端的聊天信息,并根据客户端的要求把这些信息发到一个或多个客户中。客户聊天程序则负责建立和维护与服务器端的连接,向服务器发送本客户的聊天内容,同时从服务器接受对方的响应。
功能要求如下:
客户端部分:
手动输入服务器端IP地址和端口号进行连接
发送消息给服务器端并显示服务器端回传的消息
服务器端部分:
手动建立服务器端与客户端的连接请求
接收所有用户发送的消息
向所有在线用户群发消息
目录
1 方案比较与选择 1
1.1 系统分析与设计 1
1.2 程序方案 2
1.2.1 方案一:基于TCP的socket编程 2
1.2.2 方案二:基于UDP(面向无连接)的socket程序 3
1.3 方案比较结果 5
2 程序的编程与实现 6
2.1 项目创建 6
2.2 界面设计 6
2.3 代码编写 6
2.3.1 CClientSocket 7
2.3.2 CServerSocket 17
2.3.3 CMessg 19
2.3.4 CChatDlg 21
3 程序的运行与结果 34
3.1 使用说明 34
3.2 程序功能演示 34
4 讨论及进一步研究建议 38
5 课程设计心得 39
6 Abstract 40
7 参考文献 41
1方案比较与选择
系统分析与设计
系统构架方式如下图所示:
设计出一个完整的网络聊天程序,使之实现以上基本要求。
服务端需要完成的三件事
在特定端口等待连接请求,并需要维护一个客户连接表,已记录所有成功连接。
及时接受消息,然后转发到客户连接。
监控连接状态,客户离开或故障时从列表中删除相应表项,并及时更新连接表。
客户端需要完成的三件事
建立与维护服务器的连接,并随时监测连接状态。
把用户输入的信息及时发送到服务端,同时准备好接受,并显示信息。
在用户退出时关闭连接并保存聊天记录。
程序方案
方案一:基于TCP的socket编程
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。
创建套接字(socket);
将套接字绑定到一个本地地址和端口上(bind);
将套接字设为监听模式,准备接受客户请求(listen);
等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept);
用返回的套接字和客户端进行通信(send/recv);
返回,等待另一客户请求;
关闭套接字;
客户端程序流程如下:
创建套接字(socket);
向服务器发出连接请求(connect);
和服务器端进行通信(send/recv);
关闭套接字。
在服务器端,当调用accept函数时,程序就会等待,等待客户调用connect函数发出连接请求,然后服务器端接受该请求,于是双方就建立了连接。之后,服务器端和客户端就可以利用send和recv函数进行通信了。因为服务器需要接受客户端的请求,所以必须告诉本地主机它打算在哪个IP地址和哪个端口上等待客户要求,因此必须调用bind函数来实现这一功能。而对客户端来说,当它发起连接请求,服务器端接受请求后,在服务端就保存了改客户端的IP地址和端口的信息。这样,对服务器端来说,一旦建立连接之后,实际上它已经保存了客户端的IP地址和端口号的信息,就可以利用所返回的套接字调用send/recv函数与客户端进行通信。
程序流程图如下:
方案二:基于UDP(面向无连接)的socket程序
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境
服务端程序编写流程如下:
创建套接字(socket);
将套接字绑定到一个本地地址和端口上(bind);
等待接受数据(recvfrom);
关闭套接字。
虽然面向无连接的socket编程无须建立连接,但是为了完成这次通信,对于接受端来说,它必须先启动以接受客户端发送的数据,因此接收端必须告诉主机它是在哪个地址和端口上等待数据的到来,接收端(服务器端)必须调用bind函数将套接字绑定到一个本地地址和端
文档评论(0)