版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安徽安庆市人力资源服务有限公司招聘项目制外包员工1人备考题库及答案详解(真题汇编)
- 2026广西百色市西林县八达镇等8个乡镇廉洁工作站招聘编外聘用人员8人备考题库附答案详解(夺分金卷)
- 2026辽渔集团有限公司社会招聘37人备考题库及答案详解(基础+提升)
- 2026湖北宜昌市当阳市图书馆招聘1名劳务派遣人员备考题库及答案详解(新)
- 2026年杭州高新区(滨江)教育系统直接考核招聘编外人员86人备考题库含答案详解(轻巧夺冠)
- 2026云南红河州开远市科学技术协会招聘就业见习人员4人备考题库完整参考答案详解
- 2026中共永胜县委统战部本籍人员回引计划招聘2人备考题库含答案详解(研优卷)
- 2026广东佛山顺德区沙滘初级中学办公室文员招聘1人备考题库含答案详解(模拟题)
- 2026青海省国科科技创新有限公司社会招聘6人备考题库附答案详解(黄金题型)
- 2026广西百色德保县德融文化传媒有限公司招聘4人备考题库附答案详解(预热题)
- 第4章 光谱表型分析技术
- 山西2026届高三天一小高考五(素质评价)地理+答案
- 2026年上海对外经贸大学辅导员招聘笔试模拟试题及答案解析
- AI赋能地理教学的应用实践研究-初中-地理-论文
- 浙江省杭州山海联盟2024-2025学年度七年级英语下册期中试题卷(含答案)
- 2026山东青岛海上综合试验场有限公司招聘38人备考题库含完整答案详解(历年真题)
- 护理团队建设与沟通技巧
- 芯片销售培训内容
- 耳石症手法复位治疗课件
- 炙法-酒炙法(中药炮制技术课件)
- 《情绪特工队》情绪管理(课件)-小学生心理健康四年级下册
评论
0/150
提交评论