聊天程序说明

聊天程序说明

ID:42681143

大小:126.50 KB

页数:4页

时间:2019-09-20

聊天程序说明_第1页
聊天程序说明_第2页
聊天程序说明_第3页
聊天程序说明_第4页
资源描述:

《聊天程序说明》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、操作说明:1、在IP地址栏内输入127.0.0.1,即可实现本机对话。本程序将实验二、实验三的Client与Server集于一身。2、若要实现双人聊天,需要在两台PC上分别运行本程序。在IP地址栏内输入对方机器的IP地址,即可实现双人对话。程序诞生过程:新建工程,选择MFC的AppWizard,工程名字叫做Chat。选择基于对话框的应用程序(DialogBased),完成。设置程序界而,如图:控件设置如下:1.主框(消息记录)中摆放一个编辑框(用来显示接收到的数据),ID号设置为IDC_EDIT_RECV«2.主框(发送消息)屮,我们首先摆放一个IP地址控件,它可以让我们用点分十进制

2、的格式输入一个IP地址;然后我们再摆放一个编辑框,它主要用来让用户输入需要发送的数据,然后根据用户输入的IP地址,将数据发送出去。它的ID号设置为IDC_EDIT_SEND;最后放置一个按钮(发送),ID号设置为IDC_BTN_SENDO因为是编写网络程序,所以要采用套接字来编写。首先笫一步需要来加载套接字库,进行套接字库版本的协商。在MFC中,给我们提供了一个函数,它可以帮助我们加载套接字库进行版本协商。这个函数是afxSocketlnit,它有一个参数,是指向WSADATA结构体的一个指针。在这个函数内部,它会帮我们加载套接字库,是“版本的套接字库。它还可以用WSACIeanup

3、终止套接字的调用。将这个函数在CChatApp中调用:BOOLCChatApp::lnitlnstance()if(!AfxSocketlnit())〃如果加载套接字库失败,则提示用户加载失败,返回FALSE则程序终止{AfxMessageBox(IDP_SOCKETS_INIT_FAILED);returnFALSE;}还需要添加头文件:在StdAfx.h中加入#includevAfxsock.h〉。采用我们这种方式加载套接字库,不用链接库文件。接下来在CChatDIg中加载成员两数,做套接字库本身的初始化工作。类型设为BOOL,窗数名为InitSocketo然后在这个类中增加成员

4、变量,类型为SOCKET,名称为m.socket,访问权限设为私有的。BOOLCChatDlg::lnitSocket(){m_socket=socket(AF_INET,SOCK_DGRAM,0);//创建套接字if(INVALID_SOCKET==m_socket)//socket函数的返回值是INVALID_SOCKET{MessageBoxC'套接字创建失败!J;returnFALSE;}}SOCKADDRJNaddrSock;〃因为这个程序既包含接收端,又包含发送端,而对于接收端程序來说,它需要绑定在某一个IP地址和端口上。首先定义一个地址结构体的变量。addrSock.s

5、in_family=AF_INET;//对成员进行赋值。family为地址族。addrSock.sin_port=htons(6000);//设定端口为6000。addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//设置IP地址。接收发送到本地任意IP地址的数据。intretval;//用来接收bind函数的返回值。bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));//进行绑定。讦(SOCKET_ERROR==retval)//bind函数的返回值为SOCKET_ERROR。{clo

6、sesocket(m_socket);//关闭套接字MessageBox("绑定失败!”);returnFALSE;}returnTRUE;}将初始化函数放在OnlnitDialog函数屮调用一下:BOOLCChatDlg::OnlnitDialog()lnitSocket();}这样便完成了套接字初始化的工作。接下来编写接收端程序。当我们接收数据的时候,如果没有数据到來,则会导致Recvfrom函数的阻塞,从而使程序无法运行。所以我想把接收数据的任务放到一个单独的线程屮进行。创建线程可以使用CreateThread函数°Z后需要给这个线程传递两个参数,一个是我们创建的套接字,还有一

7、个是对话框的句柄,也就是我们的接收编辑框的句柄。在这个线程中,当我们接收到数据之后,可以将数据传冋给対话框,经过处理后显示在接收的编辑框中。但是CreateThread函数只提供了一个参数来对线程传送数据。然而我们要传递的是两个,于是想到结构体。这个结构体包含了要传递的两个参数。在CChatDIg这个类的头文件中,定义一个结构体。加入以下代码:structRECVPARAM{SOCKETsock;//套接字类型的变量HWNDhwnd;//窗口类型的变暈};

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

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

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