在mfc中写多线程通信 为什么accept不阻塞那 直接向下运行了
DWORDWINAPIC_zhixingView::RecvProc2(LPVOIDlpParameter){SOCKETsock=((RECVPARAM*)lpPara...
DWORD WINAPI C_zhixingView::RecvProc2(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;
HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;
lpParameter=NULL;
delete lpParameter;
while (TRUE)
{
SOCKADDR_IN addrclient;
int len=sizeof(SOCKADDR);
SOCKET sockconn=accept(sock,(SOCKADDR*)&addrclient,&len);//会阻塞线程,但是没有阻塞
char sendbuf[100];
memset(sendbuf,0,sizeof(sendbuf));
sprintf(sendbuf,"welcome %s",inet_ntoa(addrclient.sin_addr));
send(sockconn,sendbuf,strlen(sendbuf)+1,0);
memset(recvbuf2,0,sizeof(recvbuf2));
recv(sockconn,recvbuf2,100,0);//这里也会阻塞线程
//printf("%s\n",recvbuf2);
closesocket(sockconn);
closesocket(sock);
}
}
我写在VIEW类里了, 展开
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;
HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;
lpParameter=NULL;
delete lpParameter;
while (TRUE)
{
SOCKADDR_IN addrclient;
int len=sizeof(SOCKADDR);
SOCKET sockconn=accept(sock,(SOCKADDR*)&addrclient,&len);//会阻塞线程,但是没有阻塞
char sendbuf[100];
memset(sendbuf,0,sizeof(sendbuf));
sprintf(sendbuf,"welcome %s",inet_ntoa(addrclient.sin_addr));
send(sockconn,sendbuf,strlen(sendbuf)+1,0);
memset(recvbuf2,0,sizeof(recvbuf2));
recv(sockconn,recvbuf2,100,0);//这里也会阻塞线程
//printf("%s\n",recvbuf2);
closesocket(sockconn);
closesocket(sock);
}
}
我写在VIEW类里了, 展开
展开全部
你注释说会阻塞线程,但是没有阻塞,这句话没理解,你的监听套接字 sock 有没有设置成非阻塞模式?还有,调用 accept 返回后,需要判断其返回值,如果返回值为 SOCKET_ERROR, 把 WSAGetLastError 的值打出来。
PS: 代码中有个小问题,应该先 delete lpParameter 指向的对象,再置 NULL.
PS: 代码中有个小问题,应该先 delete lpParameter 指向的对象,再置 NULL.
更多追问追答
追问
我想让该线程在没有接受到数据 时不往下执行,正常情况下ACCEPT应该是阻塞的嘛 我没有把监听设置成非阻塞模式,谢谢你的指导,
http://pan.baidu.com/s/1kTG6JCr 代码这这里 希望能得到您的回复
追答
我在公司没法下载pan.baidu.com的附件,可否发一份到我邮箱?lory.liao#lassion.com (把#换成@) 或者我晚上回去再调试一下。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询