控制台下写的一个简单程序,accept会在接到连接请求时才返回
我用同样的方法用MFC写的程序,accept会立即返回?为什么啊?怎么让他在接到连接请求时再返回呢?
我没有设置阻塞或非阻塞模式
DWORD WINAPI ListenThread(LPVOID lpParameter)
{
HWND* hWnd=(HWND*)lpParameter;
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==s)
{
MessageBox(NULL,"创建套接字失败",NULL,MB_OK);
return 0;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(9999);
if(SOCKET_ERROR==bind(s,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))
{
MessageBox(NULL,"绑定套接字失败",NULL,MB_OK);
return 0;
}
if(SOCKET_ERROR==listen(s,SOMAXCONN))
{
MessageBox(NULL,"设置监听模式失败",NULL,MB_OK);
return 0;
}
SOCKET sClt;
SOCKADDR_IN addrClt;
int siLen=sizeof(siLen);
char chBuf[1024];
while(TRUE)
{
sClt=accept(s,(SOCKADDR*)&addrClt,&siLen);
recv(sClt,chBuf,sizeof(chBuf),NULL);
::PostMessage(*hWnd,UI_CLTOL,0,(LPARAM)&addrClt);
}
return 0;
}
我用同样的方法用MFC写的程序,accept会立即返回?为什么啊?怎么让他在接到连接请求时再返回呢?
我没有设置阻塞或非阻塞模式
DWORD WINAPI ListenThread(LPVOID lpParameter)
{
HWND* hWnd=(HWND*)lpParameter;
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==s)
{
MessageBox(NULL,"创建套接字失败",NULL,MB_OK);
return 0;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(9999);
if(SOCKET_ERROR==bind(s,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))
{
MessageBox(NULL,"绑定套接字失败",NULL,MB_OK);
return 0;
}
if(SOCKET_ERROR==listen(s,SOMAXCONN))
{
MessageBox(NULL,"设置监听模式失败",NULL,MB_OK);
return 0;
}
SOCKET sClt;
SOCKADDR_IN addrClt;
int siLen=sizeof(siLen);
char chBuf[1024];
while(TRUE)
{
sClt=accept(s,(SOCKADDR*)&addrClt,&siLen);
recv(sClt,chBuf,sizeof(chBuf),NULL);
::PostMessage(*hWnd,UI_CLTOL,0,(LPARAM)&addrClt);
}
return 0;
}
解决方案 »
- 怎么用createprocess获取多种可执行命令的输出 重定向
- 请问OpenGL的显示列表的原理
- 急,软件发布后如何跟踪
- 关于insert操作的一点问题
- 如何手动添加basetsd.h进工程?
- 关于API鼠标编程的问题,很初级的
- 编程中如何使用虚拟内存
- 为什么编辑控件不能用Ctrl + C 和 Ctrl +V进行拷贝和粘贴
- 请问HCURSOR hCursor = ::LoadCursor(NULL, IDC_APPSTARTING)中的=::符号有什么作用?
- 类不见了,怎么回事?
- 有关异步套接字的问题,大家把自己的理解说一下!
- 请问怎样把同一条记录里的各个数据绑定在一起?ListControl控件
可是我改成这样也不行啊,CPU占用率很高,怎么解决啊?:do
{
sClt=accept(s,(SOCKADDR*)&addrClt,&siLen);
}while(sClt==INVALID_SOCKET);
???
问题在这啦,改过来就OK啦
我太大意了!
谢谢大家啦int siLen=sizeof(SOCKADDR);