CSocket的 OnReceive() 怎么实现?

我是阿狸 2008-11-21 12:55:02
我的代码如下,不知道为什么不会触发OnReceive()事件,请各位大侠帮忙
void CAsyncSocket::OnReceive(int nErrorCode)
{
AfxMessageBox("CAsyncSocket on receive!");
}


class mysock : public CSocket
{

protected:
void OnReceive(int nErrorCode);

};

void mysock::OnReceive(int nErrorCode)
{
//CAsyncSocket::OnReceive(nErrorCode);

AfxMessageBox("my sock OnReceive!");
}
...全文
165 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是阿狸 2008-11-21
  • 打赏
  • 举报
回复
服务器线程:
UINT starserver(LPVOID pP)
{
mutexobj.Lock();
if(sstarted)
{
mutexobj.Unlock();
return 1;
}
sstarted=1;


if(!slisten.Create(nport))
{
AfxMessageBox("server creat fall!");
sstarted=0;
mutexobj.Unlock();
return 1;
}

//AfxMessageBox("server creat success!");
if(slisten.Listen(10));
//AfxMessageBox("server listen success!");
else
{
AfxMessageBox("server listen fail!");
sstarted=0;
mutexobj.Unlock();
return 1;
}
mutexobj.Unlock();
saccept=new mysock;
saccept->CAsyncSocket::Create(nport,SOCK_STREAM,FD_READ);

if(slisten.Accept(*saccept))
{

acced=1;
AfxMessageBox("accept success!");
}
else
{
acced=0;
AfxMessageBox("accept fail!");
return 1;
}

//DWORD control = 0; //blocking socket
//saccept->CAsyncSocket::IOCtl(FIONBIO,&control);

while(1)
{
Sleep(5000);
}

AfxMessageBox("th server returned!");
return 0;

}
我是阿狸 2008-11-21
  • 打赏
  • 举报
回复
服务器端的独立接收并显示用的进程:

UINT thlisten(LPVOID pP)
{
mutexobj.Lock();
if(lsstarted)
{
AfxMessageBox("thread thlisten creat fall!");
mutexobj.Unlock();
return 1;
}
lsstarted=1;
mutexobj.Unlock();



//AfxMessageBox("thread thlisten creat success!");

CSock_onreceoveDlg *aDlg = (CSock_onreceoveDlg *)pP;

//AfxMessageBox("going into while loop!");
int nRead=0;
while(1)
{

if(acced)
{
nRead = saccept->CAsyncSocket::Receive(received,1024);//very important!
switch(nRead)
{
case SOCKET_ERROR :
if(saccept->GetLastError() != WSAEWOULDBLOCK)
{
AfxMessageBox("read error!");
}
break;

case 0 :
break;

default:
received[nRead]=0;
//AfxMessageBox("received!!");
srecv.Format("%s",received);
//AfxMessageBox(received);
aDlg->SetDlgItemText(IDC_RECEIVE,srecv);
break;
}


//AfxMessageBox("going to sleep!");
Sleep(1000);
//AfxMessageBox("awoke!");
}
}

AfxMessageBox("th listen returned!");
return 0;
}
我是阿狸 2008-11-21
  • 打赏
  • 举报
回复
客户端线程:
UINT startclient(LPVOID pP)
{

mutexobj.Lock();
if(cstarted)
{
mutexobj.Unlock();
return 1;
}
cstarted=1;
mutexobj.Unlock();


if(!sconnect.Create())
{
AfxMessageBox("client creat fall!");
mutexobj.Lock();
cstarted=0;
mutexobj.Unlock();
return 1;
}
else
// AfxMessageBox("client creat success!");

if(sconnect.Connect(IPlocal,nport));
//AfxMessageBox("connect success!");
else
{
AfxMessageBox("connect fail!");
mutexobj.Lock();
cstarted=0;
mutexobj.Unlock();
return 1;
}

while(1)
{
Sleep(5000);
}

AfxMessageBox("th client returned!");
return 0;
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧