【新手求助】accept的阻塞问题
//µã»÷¿ªÊ¼Á¬½Ó
void CServerDlg::OnStartConnect()
{
// TODO: Add your control notification handler code here
MyInitSock();
AcceptData();
}
//Æô¶¯Ì×½Ó×Ö£¬²¢ÉèΪ¼àÌý
BOOL CServerDlg::MyInitSock()
{
int Status;
WSADATA WSAData;
WORD wVersionReqd=MAKEWORD(1,1);
Status= WSAStartup(wVersionReqd,&WSAData);
m_sRead+="Ì×½Ó×Ö³õʼ»¯³É¹¦£¡\r\n";
UpdateData(FALSE);
if(Status!=0)
{
return FALSE;
}
m_hServerSocket=socket(AF_INET,SOCK_STREAM,0);
m_sRead+="Ì×½Ó×Ö´´½¨³É¹¦£¡\r\n";
UpdateData(FALSE);
//É趨±¾»ú¶Ë¿ÚºÍIP
dstclient_addr.sin_family=PF_INET;
dstclient_addr.sin_port=htons(4096);
dstclient_addr.sin_addr.S_un.S_addr=INADDR_ANY;
//°ó¶¨
Status=bind(m_hServerSocket,(struct sockaddr far*)&dstclient_addr,sizeof(dstclient_addr));
if(Status!=0)
{
return FALSE;
}
//ÉèΪ¼àÌý
Status=listen(m_hServerSocket,1);
if(Status!=0)
{
return FALSE;
}
return TRUE;
}
//½ÓÊÜÊý¾Ý
BOOL CServerDlg::AcceptData()
{
int len = sizeof(dstclient_addr);
//½ÓÊÜÐÂÁ¬½Ó
NewSock=accept(m_hServerSocket,(struct sockaddr far*)&dstclient_addr,&len);
if(NewSock<0)
{
closesocket(m_hServerSocket);
return FALSE;
}
closesocket(m_hServerSocket);
m_sRead+="Á¬½Ó³É¹¦£¡\r\n";
//»ñµÃÆÁÄ»µÄ·Ö±æÂÊ
SysWidth = GetSystemMetrics(SM_CXSCREEN);
SysHeight = GetSystemMetrics(SM_CYSCREEN);
m_sRead+="已获得屏幕分辨率\r\n";
return TRUE;
}
这个是服务端程序
当接收到客户端CONNECT函数之后
不能执行accept下面的程序
没有输出“已获得屏幕分辨率”
为什么呢
我做的这个软件只需要和一个客户端连接
还需要多线程吗
如果需要,如何做多线程代码?书上的看不大懂
能说的简易一点吗,谢谢!