网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

zhoubingchina + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档