Socket API高手请进! 重载你的OnConnect事件,收到该事件后,1.判断是否nErrorCode == 0 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 time(&t1); while((ret =connect(sd, (struct sockaddr *)&addr, sizeof(addr))) !=0) { time(&t2); if((t2 -t1) > timeout) { closesocket(sd); return -1; } peek_message(); int err_no =WSAGetLastError(); if(ret ==SOCKET_ERROR) { if(err_no ==WSAEISCONN) break; } else if(err_no ==WSAEWOULDBLOCK /*|| err_no ==WSAEINPROGRESS*/ || err_no ==WSAEALREADY) { continue; } else { closesocket(sd); return -1; } }最好不要用ioctlsocket,不如unix下的ioctl好用。最好使用select函数。可以去www.programsalon.com下载例子。查找tcp或socket即可 在WINDOWS下面可以采用消息驱动的方式来实现,使自已的程序在ACCEPT和RECV时不至于被挂起。步骤:1:定义一个自已的消息:#DEFINE UM_SOCK WM_USER+0x1002:定义自已的消息函数:如果是用的MFC的话,可以将消息函数定义为框架类的成员函数CMainFrame::OnMeg(WPARAM wParam,LPARAM lParam){.....}此函数可用来处理多种情况,可以是某个SOCKET上有连接请求,或者某个SOCKET上有数据可以接收,这要看第三步3。在完成SERVER端的初始化后,即在执行了LISTEN后,先不要调 用ACCEPT,而是提交一个事件,即提交一个连接事件,当有连接请求时,由系统产生一个UM_SOCK消息。这可以用这个函数:WSAAsyncSelect(m_sock,hWnd,UM_SOCK,FD_ACCEPT)其中最后一个参数可以用来提交不同的事件,本例中是连接事件,也可以是FD_READ或FD_WRITE,那么在消息函数中就要分清是什么事件产生的消息用这种机制实现讯后,应用程序可以不用等在ACCEPT或RECV上面,只有当有相应的事件发生时,才会调 用ACCEPT或RECV hello008同志,本人只有区区21分可送,全部献上,礼轻情谊重,多谢了 ClistCtrl中获取鼠标移动时的位置 哪个API函数可以读取文件正在拷贝或复制时的传输速率? 该找个什么样的控件? 请问在VC中载入一幅位图, 如何才能使他已任意角度旋转 如何在头文件中给一个node类型的指针赋初值? 怎么让进程不能被任务管理器杀死? 3ds文件中的材质块ID谁有,最好有具体的层次结构图,谢谢. 急呀,请教ADO中使用智能指针import时出错的问题 MFC初学者用哪本书比较好? 有什么错? 各位大虾,有没有关于游戏操纵杆编程方面的资料!多谢! 如何编程实现动态改变CPropertyPage在CPropertySheet中的ICON?都来看看,有好处的.
while((ret =connect(sd, (struct sockaddr *)&addr, sizeof(addr))) !=0)
{
time(&t2);
if((t2 -t1) > timeout)
{
closesocket(sd);
return -1;
}
peek_message();
int err_no =WSAGetLastError();
if(ret ==SOCKET_ERROR)
{
if(err_no ==WSAEISCONN) break;
}
else if(err_no ==WSAEWOULDBLOCK /*|| err_no ==WSAEINPROGRESS*/ || err_no ==WSAEALREADY)
{
continue;
}
else
{
closesocket(sd);
return -1;
}
}最好不要用ioctlsocket,不如unix下的ioctl好用。最好使用select函数。
可以去www.programsalon.com下载例子。查找tcp或socket即可
步骤:
1:定义一个自已的消息:#DEFINE UM_SOCK WM_USER+0x100
2:定义自已的消息函数:如果是用的MFC的话,可以将消息函数定义为框架类的成员函数
CMainFrame::OnMeg(WPARAM wParam,LPARAM lParam){.....}
此函数可用来处理多种情况,可以是某个SOCKET上有连接请求,或者某个SOCKET上有数据可以接收,这要看第三步
3。在完成SERVER端的初始化后,即在执行了LISTEN后,先不要调 用ACCEPT,而是提交一个事件,即提交一个连接事件,当有连接请求时,由系统产生一个UM_SOCK消息。
这可以用这个函数:
WSAAsyncSelect(m_sock,hWnd,UM_SOCK,FD_ACCEPT)
其中最后一个参数可以用来提交不同的事件,本例中是连接事件,也可以是FD_READ或FD_WRITE,那么在消息函数中就要分清是什么事件产生的消息
用这种机制实现讯后,应用程序可以不用等在ACCEPT或RECV上面,只有当有相应的事件发生时,才会调 用ACCEPT或RECV