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

通信的同步和异步 socket API CSocket CAsy(2)

电脑杂谈  发布时间:2018-02-11 19:48:12  来源:网络整理

简化后,大致的代码为:

bool CAsyncSocket::Create( long lEvent ) file://参数lEvent是指定你所关心的Socket事件

{

m_hSocket = socket( PF_INET, SOCK_STREAM, 0 ); file://创建Socket本身

CSocketWnd* pSockWnd = new CSocketWnd; file://创建响应事件的窗口,实际的这个窗口在AfxSockInit()调用时就被创建了。

pSockWnd->Create(...);

WSAAsyncSelect( m_hSocket, pSockWnd->m_hWnd, WM_SOCKET_NOTIFY, lEvent );file://Socket事件和窗口关联

}

static void PASCAL CAsyncSocket::DoCallBack(WPARAM wParam, LPARAM lParam)

{

CAsyncSocket Socket;

Socket.Attach( (SOCKET)wParam ); //wParam就是触发这个事件的Socket的句柄

int nErrorCode = WSAGETSELECTERROR(lParam); //lParam是错误码与事件码的合成

switch (WSAGETSELECTEVENT(lParam))

{

case FD_READ:

pSocket->OnReceive(nErrorCode);

break;

case FD_WRITE:

pSocket->OnSend(nErrorCode);

break;

case FD_OOB:

pSocket->OnOutOfBandData(nErrorCode);

break;

case FD_ACCEPT:

pSocket->OnAccept(nErrorCode);

break;

case FD_CONNECT:

pSocket->OnConnect(nErrorCode);

break;

通信的同步和异步_异步通信方式_同步 通信

case FD_CLOSE:

pSocket->OnClose(nErrorCode);

break;

}

}

CSocketWnd类大致为:

BEGIN_MESSAGE_MAP(CSocketWnd, CWnd)

ON_MESSAGE(WM_SOCKET_NOTIFY, OnSocketNotify)

END_MESSAGE_MAP()

LRESULT CSocketWnd::OnSocketNotify(WPARAM wParam, LPARAM lParam)

{

CAsyncSocket::DoCallBack( wParam, lParam ); file://收到Socket事件消息,回调CAsyncSocket的DoCallBack()函数

return 0L;

}

//jqb Add

那么OnSocketNotify(WPARAM wParam, LPARAM lParam)的响应又是由谁发起的呢?

//

然而,最不容易被初学Socket编程的人理解的,也是本文最要提醒的一点是,客户方在使用CAsyncSocket::Connect()时,往往返回一个WSAEWOULDBLOCK的错误(其它的某些函数调用也如此),实际上这不应该算作一个错误,它是Socket提醒我们,由于你使用了非阻塞Socket方式,所以(连接)操作需要时间,不能瞬间建立。既然如此,我们可以等待呀,等它连接成功为止,于是许多程序员就在调用Connect()之后,Sleep(0),然后不停地用WSAGetLastError()或者CAsyncSocket::GetLastError()查看Socket返回的错误,直到返回成功为止。这是一种错误的做法,断言,你不能达到预期目的。事实上,我们可以在Connect()调用之后等待CAsyncSocket::OnConnect()事件被触发,CAsyncSocket::OnConnect()是要表明Socket要么连接成功了,要么连接彻底失败了。至此,我们在CAsyncSocket::OnConnect()被调用之后就知道是否Socket连接成功了,还是失败了。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-72367-2.html

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

    • 郭震
      郭震

      骨子里透露着野蛮

    • 福圆美里
      福圆美里

      因为妓者和粉仔没有什么区别

    • 戴军
      戴军

      美国人那点手段不得人心

    每日福利
    热点图片
    拼命载入中...