vc++网络点对点聊天程序设计

上传人:飞*** 文档编号:28276509 上传时间:2018-01-16 格式:DOC 页数:6 大小:82KB
返回 下载 相关 举报
vc++网络点对点聊天程序设计_第1页
第1页 / 共6页
vc++网络点对点聊天程序设计_第2页
第2页 / 共6页
vc++网络点对点聊天程序设计_第3页
第3页 / 共6页
vc++网络点对点聊天程序设计_第4页
第4页 / 共6页
vc++网络点对点聊天程序设计_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《vc++网络点对点聊天程序设计》由会员分享,可在线阅读,更多相关《vc++网络点对点聊天程序设计(6页珍藏版)》请在金锄头文库上搜索。

1、1vc+网络点对点聊天程序设计(1) 主要设计步骤:设计一个客户机端和服务器端,两者可以相互通信!客户机端:1) 创建客户机套接字(CREATE)2) 与远程服务器进行连接(CONNECT )3) 开始数据传输(SEND,RECEIVE )4) 关闭套接字(CLOSESOCKET) 。服务器端:1) 创建服务器套接字(CREATE) 。2) 服务器套接字进行信息绑定(BIND) ,并开始监听连接( LISTEN) 。3) 接受来自客户端的连接请求(ACCEPT) ,并创建接受进程。4) 开始数据传送(SEND,RECEIVE ) 。5) 关闭套接字(CLOSESOCKET) 。具体操作:1:选

2、择应用程序,打开 VC+软件,然后想到会提示一些信息,此时,选择“MFCAPPWIARD(EXE)向导 ”此时选择基本对话框,然后单击下一步,在第二步应用向导中选择”WINDOWS SOCKETS”支持,然后单击下一步,按系统默认的点击下一步,知道完成为之.2:删除基本对话框出来的系统默认的控件类型,然后加入一个静态文本框,一个编辑框,一个连接按钮,一个发送按钮和 一个接受按钮。3.在文件 StdAfx.h 中的#endif 前面一行加入两行代码包含 Winsock 相关头文件及连接相应的库文件.#include#pragma commment(lib,Winsock32)4.在对话框类的 O

3、nInitDialog()函数中初始化 winsock,3 设置各个按钮的属性值和对象的成员变量。如下面的变量类型所示。4.为各个成员变量些写入代码。控件类型 控件 ID编辑框 edit1 IDC_EDIT_RECEIVE编辑框 edit2 IDC_EDIT_SEND按钮 1 button1 IDC_BUTTON1_CONNECT按钮 2 button2 IDC_BUTTON2_SEND按钮 3 button3 IDC_BUTTON3_RECEIVE按钮 4 button4 IDC_BUTTON1_DISCONNECT程序主对话框控件对象对应的成员变量控件 IDControl IDs变量名称M

4、ember Variable Name变量类型Category变量类型Variable TypeIDC_EDIT_RECEIVE m_stareceive Value CstringIDC_EDIT_SEND m_stasend Value CstringIDC_BUTTON1 m_connect Control CButtonIDC_BUTTON2 m_send Control CButtonIDC_BUTTON3 m_receive Control CButton2IDC_BUTTON4 m_disconnect Control CButton编写代码:(1)建立连接服务器的代码:1)在对

5、话框类的 OnInitDialog()函数中初始化 Winsock,将下面代码家独到CDialog:OnInitDialog();下面。CDialog:OnInitDialog();WSATA wsaData;WORD version=MAKEWORD(2,0);int ret=WSAStartup(version,if(ret!=0)TRACE(iitialize error.!);2)连接服务器,编辑连接按钮的相应函数,代码如下:Void C12Dlg:Onconnect()WSADATA wsaData;DWORD dwIPAddr;SOCKADDR_IN sockAddr;If(WSA

6、Startup(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,(LPSOCKADDR)if(nConne

7、ct)AfxMessageBox(“连接服务器出错!”);/禁用“发送数据”GetDlgItem(IDC_CONNECT)-Enable Window(FALSE);Return;/启用“发送按钮”GetDlgItem(IDC_CONNECT)-EnableWindow(TRUE);3)编辑发送按钮的时间相应函数,具体代码如下Void C12ClientDlg:OnSend()If(m_hSock=INVALID_SOCKET)3AfxMessageBox(“当前连接不可用,请先连接到服务器!”) ;return;Cstring strContent;/从编辑框中获取将要发送的内容GetDlg

8、Item(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);/清空编辑框strContent.Empty();GetDlgItem(IDC_CONTENT)-SetWindow Tex

9、t(strContent);此时 send 所发送的内容是编辑框所显示的内容5) 为接收按钮的事件响应函数代码如下:Void C12ClientDlg:OnReceive()If(m_hSock=INVALID_SOCKET)AfxMessageBox(“当前连接不可用,请先连接到服务器!”) ;return;Cstring strContent;/从编辑框中获取将要发送的内容GetDlgItem(IDC_CONTENT)-GetWindow Text(strContent);If(strContent.IsEmpty()AfxMessageBox(“不能发送空信息!”);Return;str

10、Content+=”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);4此时接收编辑框显示的内容为客户端发送过来的内容6) 为断开连接按的事件响应函数,代码如下Void C12Dlg:OnDisconnect()If(m_hSocket!=INVAL

11、ID_SOCKET)/关闭套接字Closesocket(m_hSocket) ;WSACleanup();(2) 使用应用程序向导生成一个基本对话框 12Server,在第二步中向导选择“Windows Sockets”支持,使用对话框编辑框设计编辑框的内容控件类型 控件 ID编辑框 edit1 IDC_EDIT_RECEIVE编辑框 edit2 IDC_EDIT_SEND按钮 1 button1 IDC_BUTTON1_CONNECT按钮 2 button2 IDC_BUTTON2_SEND按钮 3 button3 IDC_BUTTON3_RECEIVE按钮 4 button4 IDC_BU

12、TTON1_DISCONNECT程序主对话框控件对象对应的成员变量控件 IDControl IDs变量名称Member Variable Name变量类型Category变量类型Variable TypeIDC_EDIT_RECEIVE m_stareceive Value CstringIDC_EDIT_SEND m_stasend Value CstringIDC_BUTTON1 m_connect Control CButtonIDC_BUTTON2 m_send Control CButtonIDC_BUTTON3 m_receive Control CButtonIDC_BUTTON

13、4 m_disconnect Control CButton1) 为服务器端接收按钮的事件响应函数,代码如下:Void C12ServeDlg:Onconnect()WSADATA wsaData;int iErrorCode;If(WSAStartup(MAKEWORD(2,0),&wsaData) MessageB(“不能加载 Windows Sockets”,AfxGerAppName(),MB_OKIMB_ICONSTOP);WSACleanup();Return;m_hServerSocket=socket(PF_INET,SOCK_STREAM,0);if(m_hSocket=IN

14、VALID_SOCK);sockAddr.sin_family=AF_INET;5AfxMessageBox(“创建套接字出错!”);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,(LPSOCKADDR)&m_socketAddr,sizeof(m_sockServerAddr)=SOCKET_ERR

15、OR)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(“无法监听!”);Return;2)WM_SEREVER_ACCEPT 事件的响应函数。LRESULT C12SEREVEDlg:OnS

16、ereveAccept(WPARAM wParam,LPARAM ,LParam)SOCKADDR_IN m_sock12Addr;int nLength=sizeof(SOCKADDR);int I;if(WSAGETSELECTEVENT(IPARAM)=FD_ACCEPT)If(i=0;(iGetDlgItem(IDC_GETINFO)-GetWindowText(tmp);Tmp+=”收到新消息” ;Tmp+= chIncomingDataBuffer;Tmp+=”rn”;if(Istrlen(chIncomingDataBuffer)!=0)GetDlgItem(IDC_GETINFO)-SetWindowText(tmp); Return il;2) 加入自定义消息的响应BEGIN_MESSAGE_MAP(C12Dlg,CDialog)ON_

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号