b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

windows linux socket_alarm onreceive_socket onreceive

电脑杂谈  发布时间:2017-01-30 18:03:24  来源:网络整理

发送过来的数据,我直接用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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 候东娟
      候东娟

      现在理由有了

      • 曹植
        曹植

        要是美帝能保证伊国领土不被伊凡份子攻占

    热点图片
    拼命载入中...