【新手求助】accept的阻塞问题

zhangch4021 2010-05-13 09:02:43
//µã»÷¿ªÊ¼Á¬½Ó
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下面的程序
没有输出“已获得屏幕分辨率”

为什么呢

我做的这个软件只需要和一个客户端连接
还需要多线程吗
如果需要,如何做多线程代码?书上的看不大懂
能说的简易一点吗,谢谢!
...全文
114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
周药师 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhangch4021 的回复:]

没加UpdateData().....
我靠……
[/Quote]

问题解决了吗?
zhangch4021 2010-05-13
  • 打赏
  • 举报
回复
没加UpdateData().....
我靠……

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧