发送过来的数据,我直接用Receive接收可以接收得到,而且是正确的,但是为什么重载后的OnReceive没有响应呢?
这是怎么回事呢?
我发现了,有时候有,有时候没有经过OnReceive
但是不知道应该是在什么情况下有,什么情况下没有!
××××××××××××××××××××××××××××××
在服务器端
×××××××××××××××××××××××××××××××
在窗口建立时(intCCardServerView::OnCreate(LPCREATESTRUCTlpCreateStruct)
)
创建线程 m_pClient1Thread=AfxBeginThread(Client1ThreadFunc,this);
然后程函数实现
UINTCCardServerView::Client1ThreadFunc(LPVOIDpParam)
{
MSGmsg;
intnMessage;
CCardServerView*pView=(CCardServerView*)pParam;
pView->m_sockListen1.Create(5802,SOCK_STREAM,"192.110.1.100");
pView->m_sockListen1.Bind(5801,"192.110.1.100");
pView->m_sockListen1.Listen(1);
if(!pView->m_sockListen1.Accept(pView->m_client[0].m_sock))
{
pView->m_sockListen1.Close();
pView->m_bThread1Exit=FALSE;
return0;
}
}
×××××××××××××××××
在客户端
×××××××××××××××××
跟服务器端一样创建线程,然后程函数中
pView->m_sockServer.Create();
if(pView->m_sockServer.Connect(pView->m_strServerIP,5802))
{
pView->m_bServerListen=TRUE;
pView->MessageBox("连接成功");intm=0x10;
// intn=pView->m_sockServer.Receive(&m,4);
// intn=pView->m_sockServer.Send(&m,4);//连接成功后立即发送数据,此时服务器端的OnReceive有响应
break; }
而当我在以后
intm=0x10;
intn=pView->m_sockServer.Send(&m,4);
intd=pView->m_sockServer.GetLastError();发送数据就是不行,服务器端的OnReceive没有响应!
这是为什么?我快急死了!
你是用的多线程,要么程中自己Recvive,要么制定线程的m_pMainWnd,因为OnRecvive要有Wnd支持的。其实简单一点,不用线程就可以了
不用多线程,不会产生堵塞的,其实socket创建,系统内部已经创建了线程,已经是多线程了。假如你非要用多线程,必须在多线程中自己调用Recvive。同步或异步调用,主要是等待事件。创建socket时指定要处理的事件。
CAsyncSocket才是异步方式的,CSocket虽然继承了他的成员函数,但是本身是同步方式的。你不能再同步方式下用异步的机制进行处理
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29610-1.html
要是美帝能保证伊国领土不被伊凡份子攻占
现在理由有了