下面定义网络异步事件的回调函数void CSocketSeverDlg::OnNetEvent(WPARAM wParam, LPARAM lParam)
{
file://调用Winsock API函数,得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);file://调用Winsock API函数,得到发生此事件的客户端套接字
SOCKET CurSock= (SOCKET)wParam;switch(iEvent)
{
case FD_ACCEPT: file://客户端连接请求事件
OnAccept(CurSock);
break;
case FD_CLOSE: file://客户端断开事件:
OnClose(CurSock);
break;
case FD_READ: file://网络数据包到达事件
OnReceive(CurSock);
break;
case FD_WRITE: file://发送网络数据事件
OnSend(CurSock);
break;
default: break;
}
} 谁能给个例子,在onaccept,onsend,onreceive中该写什么,如果发送接受文件的话
{
file://调用Winsock API函数,得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);file://调用Winsock API函数,得到发生此事件的客户端套接字
SOCKET CurSock= (SOCKET)wParam;switch(iEvent)
{
case FD_ACCEPT: file://客户端连接请求事件
OnAccept(CurSock);
break;
case FD_CLOSE: file://客户端断开事件:
OnClose(CurSock);
break;
case FD_READ: file://网络数据包到达事件
OnReceive(CurSock);
break;
case FD_WRITE: file://发送网络数据事件
OnSend(CurSock);
break;
default: break;
}
} 谁能给个例子,在onaccept,onsend,onreceive中该写什么,如果发送接受文件的话
由于MFC把这些事件处理函数定义为虚函数,所以要生成一个新的C++类,以重载这些函数,做法如下: 以Public方式继承CAsyncSocket类,生成新类MySock; 为MySock类添加虚函数OnReceive、OnConnect、OnSend 4. 在MySock.ccp中添加以下代码 #include "CSockClient.h"
#include "CSockClientDlg.h"5. 在MySock.h中添加以下代码 public:
BOOL m_bConnected; //是否连接
UINT m_nLength; //消息长度
char m_szBuffer[4096]; //消息缓冲区6. 在MySock.ccp中重载各函数 MySock::MySock()
{
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
m_bConnected=FALSE;
}MySock::~MySock()
{
//关闭套接字
if(m_hSocket!=INVALID_SOCKET)
Close();
}void MySock::OnReceive(int nErrorCode)
{
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
//下面两行代码用来获取对话框指针
CCSockClientApp* pApp=(CCSockClientApp*)AfxGetApp();
CCSockClientDlg* pDlg=(CCSockClientDlg*)pApp- >m_pMainWnd;
pDlg- >m_MSGS.InsertString(0,m_szBuffer);
memset(m_szBuffer,0,sizeof(m_szBuffer));
CAsyncSocket::OnReceive(nErrorCode);
}void MySock::OnSend(int nErrorCode)
{
Send(m_szBuffer,m_nLength,0);
m_nLength=0;
memset(m_szBuffer,0,sizeof(m_szBuffer));
//继续提请一个“读”的网络事件,接收Server消息
AsyncSelect(FD_READ);
CAsyncSocket::OnSend(nErrorCode);
}void MySock::OnConnect(int nErrorCode)
{
if (nErrorCode==0)
{
m_bConnected=TRUE;
CCSockClientApp* pApp=(CCSockClientApp*)AfxGetApp();
CCSockClientDlg* pDlg=(CCSockClientDlg*)pApp- >m_pMainWnd;
memcpy(m_szBuffer,"Connected to ",13);
strncat(m_szBuffer,pDlg- >m_szServerAdr,
sizeof(pDlg- >m_szServerAdr));
pDlg- >m_MSGS.InsertString(0,m_szBuffer);
AsyncSelect(FD_READ); ////提请一个“读”的网络事件,准备接收
}
CAsyncSocket::OnConnect(nErrorCode);
}
这些都是我自定义的函数,