- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程通讯-TCP聊天程序-VC要点
操作系统课程设计——多线程通讯-TCP聊天程序-VC++
一、设计题目:多机进程通信应用Socket进程通信技术编写聊天室程序,实现基于服务器的并发多机信息转发。如果各客户端在线则可以实时聊天、发送接收文件,如果某客户端离线,则发送给他的消息可由服务器端进行内容缓存,待重新连线后可以自动接收通过服务器转发的信息或文件。缓存与转发的控制算法可参考操作系统课程中生产者消费者进程同步方法、缓冲池技术等相关理论。二、 设计思路和功能的详细描述采用TCP协议,所以属于客户机/服务器模式,因此需要聊天服务器端和聊天客户端两个程序,实现的功能是:任意一台装有客户端程序的计算机都可以通过服务器端的IP地址与服务器相连,然后进入聊天室与连接到服务器的其他客户进行聊天。当客户聊天结束时,可以点断开与服务器断开连接,以释放进程让其他等待的客户进入聊天室,本聊天室最大同时支持50个客户端的连接,如果服务器配置较高可以修改程序来增加同时连接数。三、采用的方法、技术、运行环境及其配置本聊天程序采用TCP协议,用VC++编写,属于客户机/服务器模式。采用了多线程的机制。其中使用windows Sockets实现多台计算机(多个进程)间的通信,SOCKET实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有SOCKET接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个SOCKET接口来实现。在客户机/服务器模式中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务即对客户的请求作出适当的反应。本聊天程序就是基于这中思想实现的,程序分为两大部分:TCP聊天服务器端和TCP聊天客户端。两者都拥有各自的SOCKET接口,其中服务器端SOCKET接口需要绑定到固定地址上(实现语句:ock=Socket(AF_INET,SOCK_STREAM,0);),等待客户端的连接(实现语句:listen(sock,5);)。等待客户端的连接的过程就是通过多进程机制来实现的。聊天程序是在VISUAL C++6.0上编译实现的,在WINDOWS2000,XP上测试运行成功。对客户计算机配置无特殊要求,由于所设置的最大连接进程为50,所以对服务器要求也不高。四、关键源程序及其详细的注释一、服务器端:1、Socket初始化//初始化对话框BOOL CCSocketDlg::OnInitDialog(){count=0;m_list.InsertColumn(0,消息);m_list.SetColumnWidth(0,435);m_edit.SetLimitText(99);for (int i=0;i50;i++)//初始化SOCKET数组msgsock=NULL;serv.sin_addr.s_addr=htonl(INADDR_ANY); //设定地址serv.sin_family=AF_INET;serv.sin_port=5000;//htons(5000);addlen=sizeof(serv);m_button.EnableWindow(FALSE);sock=socket(AF_INET,SOCK_STREAM,0); //创建socketif (bind(sock,(sockaddr*)serv,addlen)) //绑定{m_edit.SetWindowText(绑定错误);}else{m_edit.SetWindowText(服务器创建成功);//显示提示信息,表示服务器创建成功listen(sock,5); //开始侦听 AfxBeginThread(thread,0); //调用线程}return TRUE;}2、接收线程//服务器线程UINT thread(LPVOID p){char buff[100];//定义缓冲区CSize size;size.cx=0;size.cy=30;int s=1,msgcount,loop=1,flag=0;CCSocketDlg *dlg=(CCSocketDlg*)AfxGetApp()-GetMainWnd();//获得当前运行对话框句柄msgcount=dlg-getcount();//获取还没有被占用的数组序号if (msgcount==-1)//如果不等于-1,则表示,还有空缺SOCKETloop=0;if(loop){s=1;dlg-msgs
您可能关注的文档
- 复杂钣金件电镀锌镀层厚度改善报告.ppt
- 海燕ppt-高尔基.ppt
- 海燕教学课件.ppt
- 夏普白电终端功能说明.pptx
- 外电防护专项方案.doc
- 外周循环监测(于布为).ppt
- 外贸函电unit_2.ppt
- 外贸函电unit_4.ppt
- 外贸流程模拟实训-函电往来.ppt
- 外墙保温系统ppt.pptx
- 吉安县公开招聘专职文明实践员笔试备考试题及答案解析.docx
- 2025重庆枫叶国际学校招聘教师笔试备考试题及答案解析.docx
- 游机队电玩自制联网教程-tplink.pdf
- 2025重庆新华出版集团招聘1人笔试模拟试题及答案解析.docx
- 2025宜宾高新丽雅城市产业发展有限公司公开招聘笔试模拟试题及答案解析.docx
- 2025云南保山市龙陵县勐糯镇人民政府招聘合同制专职消防员1人笔试模拟试题及答案解析.docx
- 11.1生活中常见的盐 九年级化学人教版下册.pptx
- 6.1法律保护下的婚姻 高二政治《法律与生活》课件(统编版选择性必修2)(新版).pptx
- 文昌市中小学教师校园招聘29人笔试模拟试题及答案解析.docx
- 10.1.5 常见的酸和碱(第5课时)课件-九年级化学人教版下册.pptx
文档评论(0)