vc网络点对点聊天程序设计_第1页
vc网络点对点聊天程序设计_第2页
vc网络点对点聊天程序设计_第3页
vc网络点对点聊天程序设计_第4页
vc网络点对点聊天程序设计_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论