版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、vc+网络点对点聊天程序设计(1) 主要设计步骤:设计一个客户机端和服务器端,两者可以相互通信!客户机端:1) 创建客户机套接字(create)2) 与远程服务器进行连接(connect)3) 开始数据传输(send,receive)4) 关闭套接字(closesocket)。服务器端:1) 创建服务器套接字(create)。2) 服务器套接字进行信息绑定(bind),并开始监听连接(listen)。3) 接受来自客户端的连接请求(accept),并创建接受进程。4) 开始数据传送(send,receive)。5) 关闭套接字(closesocket)。具体操作:1:选择应用程序,打开vc+软
2、件,然后想到会提示一些信息,此时,选择“mfcappwiard(exe)向导”此时选择基本对话框,然后单击下一步,在第二步应用向导中选择”windows sockets”支持,然后单击下一步,按系统默认的点击下一步,知道完成为之.2:删除基本对话框出来的系统默认的控件类型,然后加入一个静态文本框,一个编辑框,一个连接按钮,一个发送按钮和 一个接受按钮。3.在文件stdafx.h中的#endif前面一行加入两行代码包含winsock相关头文件及连接相应的库文件.#include<winsock.h>#pragma commment(lib,"winsock32")
3、4.在对话框类的oninitdialog()函数中初始化winsock,3设置各个按钮的属性值和对象的成员变量。如下面的变量类型所示。4.为各个成员变量些写入代码。控件类型控件id编辑框 edit1 idc_edit_receive编辑框 edit2 idc_edit_send按钮1 button1idc_button1_connect按钮2 button2idc_button2_send按钮3 button3idc_button3_receive按钮4 button4idc_button1_disconnect 程序主对话框控件对象对应的成员变量控件idcontrol ids变量名称memb
4、er variable name变量类型category变量类型variable typeidc_edit_receivem_stareceivevaluecstringidc_edit_sendm_stasendvaluecstringidc_button1m_connectcontrolcbuttonidc_button2m_sendcontrolcbuttonidc_button3m_receivecontrolcbuttonidc_button4m_disconnectcontrolcbutton 编写代码:(1)建立连接服务器的代码:1)在对话框类的oninitdialog()函数中
5、初始化winsock,将下面代码家独到cdialog:oninitdialog();下面。cdialog:oninitdialog();wsata wsadata;word version=makeword(2,0);int ret=wsastartup(version,&wsadata);if(ret!=0)trace("iitialize error.!");2)连接服务器,编辑连接按钮的相应函数,代码如下:void c12dlg:onconnect() wsadata wsadata; dword dwipaddr; sockaddr_in sockaddr;
6、 if(wsastartup(makeword(2,0),&wsadata) messagebox(“不能加载 windows sockets”,null,mb_ok); return;m_hsocket(pf_inet,sock_stream,0);sockaddr.sin_family=af_inet;/连接服务器的端口号sockaddr.sin_port=htons(5500);/服务器地址为本机sockaddr.sin_addr.s_un.s_addr=inet_addr(“127.0.0.1”);int nconnect=connect(m_hsocket,(lpsockad
7、dr)&sockaddr,sizeof(sockaddr);if(nconnect) afxmessagebox(“连接服务器出错!”); /禁用“发送数据”getdlgitem(idc_connect)->enable window(false);return;/启用“发送按钮”getdlgitem(idc_connect)->enablewindow(true);3)编辑发送按钮的时间相应函数,具体代码如下 void c12clientdlg:onsend()if(m_hsock=invalid_socket) afxmessagebox(“当前连接不可用,请先连接到服
8、务器!”); return;cstring strcontent;/从编辑框中获取将要发送的内容getdlgitem(idc_content)->getwindow text(strcontent);if(strcontent.isempty() afxmessagebox(“不能发送空信息!”); return;strcontent+=”n”;int ncharsend(m_hsocket.strcontent,strcontent.getlength(),0);if(ncharsend=socket_error) messagebox(“发送过程中出错!”,null,mb_ok);/
9、清空编辑框strcontent.empty();getdlgitem(idc_content)->setwindow text(strcontent);此时send所发送的内容是编辑框所显示的内容5) 为接收按钮的事件响应函数代码如下: void c12clientdlg:onreceive()if(m_hsock=invalid_socket) afxmessagebox(“当前连接不可用,请先连接到服务器!”); return;cstring strcontent;/从编辑框中获取将要发送的内容getdlgitem(idc_content)->getwindow text(st
10、rcontent);if(strcontent.isempty() afxmessagebox(“不能发送空信息!”); return;strcontent+=”n”;int ncharsend(m_hsocket.strcontent,strcontent.getlength(),0);if(ncharsend=socket_error) messagebox(“发送过程中出错!”,null,mb_ok);/清空编辑框strcontent.empty();getdlgitem(idc_content)->setwindow text(strcontent);此时接收编辑框显示的内容为客
11、户端发送过来的内容6) 为断开连接按的事件响应函数,代码如下 void c12dlg:ondisconnect() if(m_hsocket!=invalid_socket) /关闭套接字 closesocket(m_hsocket) ; wsacleanup();(2) 使用应用程序向导生成一个基本对话框12server,在第二步中向导选择“windows sockets”支持,使用对话框编辑框设计编辑框的内容控件类型控件id编辑框 edit1 idc_edit_receive编辑框 edit2 idc_edit_send按钮1 button1idc_button1_connect按钮2 b
12、utton2idc_button2_send按钮3 button3idc_button3_receive按钮4 button4idc_button1_disconnect 程序主对话框控件对象对应的成员变量控件idcontrol ids变量名称member variable name变量类型category变量类型variable typeidc_edit_receivem_stareceivevaluecstringidc_edit_sendm_stasendvaluecstringidc_button1m_connectcontrolcbuttonidc_button2m_sendcont
13、rolcbuttonidc_button3m_receivecontrolcbuttonidc_button4m_disconnectcontrolcbutton1) 为服务器端接收按钮的事件响应函数,代码如下:void c12servedlg:onconnect() wsadata wsadata; int ierrorcode; if(wsastartup(makeword(2,0),&wsadata) messageb(“不能加载 windows sockets”,afxgerappname(),mb_okimb_iconstop); wsacleanup(); return;m
14、_hserversocket=socket(pf_inet,sock_stream,0);if(m_hsocket=invalid_sock);sockaddr.sin_family=af_inet; afxmessagebox(“创建套接字出错!”);return;/绑定端口m_socketserveraddr.sin_family=af_inet;m_socketserveraddr.sin_addr.s_addr=inet_addr(“127.0.0.1”);m_socketserveraddr.sin_port=htons(5500);if(bind(m_hserversocket,(
15、lpsockaddr)&m_socketaddr,sizeof(m_sockserveraddr)=socket_error) afxmessagebox(“无法绑定端口”); return;ierrorcode=wsaasyncsekect(m_hsweversocket,m_hwnd,wm_server_accept,fd_accept);if(ierrorcode=socket_error) afxmessagebox(“无法添加消息响应”); return;/开始监听if(listen(m_hserversocket,5)=socket_error) afxmessagebox
16、(“无法监听!”); return;2)wm_serever_accept事件的响应函数。lresult c12serevedlg:onsereveaccept(wparam wparam,lparam ,lparam) sockaddr_in m_sock12addr; int nlength=sizeof(sockaddr); int i; if(wsagetselectevent(iparam)=fd_accept) if(i=0;(i<10)&&(m_a12socketi!=invalid_socket);i+);if(i=10) return ol;/返回一个新
17、的socketm_a12socketi=accept(m_hserversocet,(lpsocletaddr)&m_sock12addr,(lpint)&nlength);if(m_a12socketi=invalid_socket) afxmessagebox(“accept函数无法返回一个新的soclet!”); return ol;wsaasyncselete(m_a12socketi,m_hwnd,wm_client_read,fd_read);retuen ol;3)加入对消息的响应函数lresult cserevedlg:onsereveread(wparam w
18、param,lparam ,iparam) int ibytesread; int ibufferlength; int iend; int ispaceremaining; char chincomingdatabuffer1024; int i; ispaceremaining-=iend; for(i=0;(i<10);&&(m_a12socketi!=wparam);i+) ibytesread=recv(m_a12socketi,(lpstr)(chincomingdatabuffer),ispaceremaining,0); iend+=ibytesread; chincomingdatabufferiend=0; /编辑框中新增收到的消息 cstring tmp; this->getdlgitem(idc_getinfo)->getwindowtext(tmp); tmp+=”收到新消息”; tmp+= chincomingdatabuffer; tmp+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 14048.16-2025低压开关设备和控制设备第8部分:旋转电机用装入式热保护(PTC)控制单元
- 2026年创意黑金风的崛起财务报告分析
- 2025年中职野生动物保护(保护基础认知)试题及答案
- 2025年大学特殊教育(特殊儿童康复)试题及答案
- 2025年高职(旅行社业务)线路设计实操试题及答案
- 2025年高职(仓储管理)仓储管理综合测试试题及答案
- 2025年高职空中乘务(乘务服务规范)试题及答案
- 2025年高职风电系统运行与维护(风机调试)期末试题
- 2026年建筑施工(脚手架搭设技术)试题及答案
- 2025年中职(客户关系管理)客户关系综合测试试题及答案
- 不良资产合作战略框架协议文本
- 2025年盐城中考历史试卷及答案
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库完整参考答案详解
- 2025年郑州工业应用技术学院马克思主义基本原理概论期末考试模拟试卷
- 测绘资料档案汇交制度
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库及完整答案详解
- 2025年六年级上册道德与法治期末测试卷附答案(完整版)
- 附件二;吊斗安全计算书2.16
- 学校食堂改造工程施工组织设计方案
- 2025年浙江省辅警考试真题及答案
- 2025中国热带农业科学院科技信息研究所第一批招聘4人备考题库(第1号)附答案
评论
0/150
提交评论