多线程通讯-TCP聊天程序-VC++

多线程通讯-TCP聊天程序-VC++

ID:42601414

大小:50.50 KB

页数:14页

时间:2019-09-18

多线程通讯-TCP聊天程序-VC++_第1页
多线程通讯-TCP聊天程序-VC++_第2页
多线程通讯-TCP聊天程序-VC++_第3页
多线程通讯-TCP聊天程序-VC++_第4页
多线程通讯-TCP聊天程序-VC++_第5页
资源描述:

《多线程通讯-TCP聊天程序-VC++》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、操作系统课程设计——多线程通讯-TCP聊天程序-VC++操作系统课程设计任务书一、设计题目:多机进程通信应用Socket进程通信技术编写聊天室程序,实现基于服务器的并发多机信息转发。如果各客户端在线则可以实时聊天、发送接收文件,如果某客户端离线,则发送给他的消息可由服务器端进行内容缓存,待重新连线后可以自动接收通过服务器转发的信息或文件。缓存与转发的控制算法可参考操作系统课程中生产者消费者进程同步方法、缓冲池技术等相关理论。二、设计思路和功能的详细描述采用TCP协议,所以属于客户机/服务器模式,因此需要聊天服务器端和

2、聊天客户端两个程序,实现的功能是:任意一台装有客户端程序的计算机都可以通过服务器端的IP地址与服务器相连,然后进入聊天室与连接到服务器的其他客户进行聊天。当客户聊天结束时,可以点断开与服务器断开连接,以释放进程让其他等待的客户进入聊天室,本聊天室最大同时支持50个客户端的连接,如果服务器配置较高可以修改程序来增加同时连接数。三、采用的方法、技术、运行环境及其配置本聊天程序采用TCP协议,用VC++编写,属于客户机/服务器模式。采用了多线程的机制。其中使用windowsSockets实现多台计算机(多个进程)间的通信,

3、SOCKET实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有SOCKET接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个SOCKET接口来实现。在客户机/服务器模式中客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的地址监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务即对客户的请求作出适当的反应。本聊天程序就是基于这中思想实现的,程序分为两大部分:TCP聊天服务器端和TCP聊天

4、客户端。两者都拥有各自的SOCKET接口,其中服务器端SOCKET接口需要绑定到固定地址上(实现语句:ock=Socket(AF_INET,SOCK_STREAM,0);),等待客户端的连接(实现语句:listen(sock,5);)。等待客户端的连接的过程就是通过多进程机制来实现的。聊天程序是在VISUALC++6.0上编译实现的,在WINDOWS2000,XP上测试运行成功。对客户计算机配置无特殊要求,由于所设置的最大连接进程为50,所以对服务器要求也不高。四、关键源程序及其详细的注释<一>、服务器端:1、Soc

5、ket初始化//初始化对话框BOOLCCSocketDlg::OnInitDialog(){count=0;m_list.InsertColumn(0,"消息");m_list.SetColumnWidth(0,435);m_edit.SetLimitText(99);for(inti=0;i<50;i++)//初始化SOCKET数组msgsock=NULL;serv.sin_addr.s_addr=htonl(INADDR_ANY);//设定地址serv.sin_family=AF_INET;serv.sin_po

6、rt=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);//

7、开始侦听AfxBeginThread(&thread,0);//调用线程}returnTRUE;}2、接收线程//服务器线程UINTthread(LPVOIDp){charbuff[100];//定义缓冲区CSizesize;size.cx=0;size.cy=30;ints=1,msgcount,loop=1,flag=0;CCSocketDlg*dlg=(CCSocketDlg*)AfxGetApp()->GetMainWnd();//获得当前运行对话框句柄msgcount=dlg->getcount();//获

8、取还没有被占用的数组序号if(msgcount==-1)//如果不等于-1,则表示,还有空缺SOCKETloop=0;if(loop){s=1;dlg->msgsock[msgcount]=accept(dlg->sock,(sockaddr*)&(dlg->serv),&(dlg->addlen));//用空缺的SOCKET等待客户连接if(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。