首先,你需要自己继承CSoscket类或者CAsyncSocket类,定义出一个CServer类和一个CClient类;然后再你的主程序(主线程)中,建立服务端和客户端的实例,并进行相应的初始化;
服务端主要档如拍需要制定监听端口,然后服务端还需要调用listen这个函数使端口进入监听状态;然后你的CServer类中需要实现OnAccept这个函数,它负责检测有没有客户端接入;实现OnReceive,它负责通知你有数据需要接受;实现OnClose,它负责通知你橡氏,某个客户端断开了连接;
客户端主要行羡需要调用connect函数向指定的服务器进行连接;然后你的CClient类中需要实现OnConnect函数,它负责告诉你与服务端连接已建立;实现OnReceive,它负责通知你有数据需要接收;实现OnClose,它负责通知你,某个服务端断开你的连接;
接下来,在前面我提到的OnAccept函数中,你需要调用Accept进行客户端接入 *** 作;在OnReceive函数中应该调用Receive函数接收数据;OnConnect和OnClose是一个通知,这个根据你的需要自己添加功能;发送数据调用send函数
第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自贺带定义消息至锋拍圆少是WM_USER+100,因为很多新控件也要使用WM_USER消息。第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数银塌并返回LPESULT。
LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
...
return 0
}
第三步:在类头文件的AFX_MSG块中说明消息处理函数:
class CMainFrame:public CMDIFrameWnd
{
...
// 一般消息映射函数
protected:
// {{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)
afx_msg void OnTimer(UINT nIDEvent)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
1.消息发送方:发送消息首先在A的头文件(*.h)中自定义这个消息:
1 #define WM_MyMessage WM_USER+100
或者:
1 const UINT WM_MYMESSAGE = WM_USER + n
需注意以下几点:
所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数n来表示的, n一般至少大于100
该消息一般加在stdafx.h 或resource.h 或*.h中,一般都是全局变量头文件
A是向外发送消息的对象,因此在A的某个拆散方法(函数)里就会调用用来发消息的函数B::SendMessage()/B::PostMessage(),昌激因为是B接受消息。
回到顶部
2.消息接收方:接受消息
消息接收方对象接受一个消息,需有以下三部分:
在头文件(*.h)中有该消息的处理函数的原型;
在实现文件(*.cpp)中有接受消息映射的宏;
在实现文件(*.cpp)中有该消息的处理函数的具体实现。
2.1 头文件中加上自定义消息的处理函数原型
在DECLARE_MESSAGE_MAP()语句之前,加如下形式的函数原型:
1 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
对Win32来说,wParam, lParam是传递消息最常用的手段。
2.2 实现文件中加上接受消息映射的宏
在cpp文件里,BEGIN_MESSAGE_MAP语旅迅氏句之后,加如下形式的代码:
1 ON_MESSAGE(WM_MyMessage, OnMyMessage)
也就是说WM_MyMessage消息对应OnMyMessage函数。注意,上面是不用分号结尾的。
2.3 在实现文件中给出消息处理函数的具体实现
1 LRESULT CBDlg::OnMyMessage( WPARAM wParam, LPARAM lParam )
2 {
3 //处理用户自定义消息
4 ......
5 return 0
6 }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)