首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

accept有关问题

2012-01-28 
accept问题intportCONNECE_PORTsaServer.sin_familyAF_INETsaServer.sin_porthtons(port)saServer.s

accept问题
int   port=CONNECE_PORT;
saServer.sin_family=AF_INET;
saServer.sin_port=htons(port);
saServer.sin_addr.S_un.S_addr=inet_addr( "127.0.0.1 ");
//ASSERT(s_hSocket=NULL);
WORD   wVersionRequested;
WSADATA   wsaData;
int     nErr;
wVersionRequested=MAKEWORD(2,0);
nErr=WSAStartup(wVersionRequested,&wsaData);
if(nErr)
{
AfxMessageBox( "加载winsock失败! ");
return;
}
if((s_hSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_IP))==SOCKET_ERROR)
{
AfxMessageBox( "创建socket失败! ");
return;
}
if(bind(s_hSocket,(sockaddr*)&saServer,sizeof(saServer))==SOCKET_ERROR)
{
AfxMessageBox( "绑定地址失败! ");
return;
}
listen(s_hSocket,5);
while(1)
{
sockaddr_in     saClient;
//ASSERT(s_hSocket=NULL);
int   nLengtheAddr=sizeof(saClient);
SOCKET   s_hAcceptSocket=accept(s_hSocket,(sockaddr*)&saClient,&nLengtheAddr);
if(s_hAcceptSocket==INVALID_SOCKET)
{
if(WSAGetLastError()!=WSAEINTR)
{
AfxMessageBox( "调试accept失败! ");
return   ;
}
}
p-> socket=s_hAcceptSocket;
AfxBeginThread(ServerThreadProc,(LPVOID)p);
GetDlgItem(IDC_START)-> EnableWindow(FALSE);
}

调试时,不能跳过accept.运行程序时,我的界面有一个开启服务器的按钮,按下按钮程序死了.为什么?

[解决办法]
你这样的accept是阻塞的,写console的话可以,不卡界面的话代码当然不能这样写啦。用mfc里面封装的类吧,CSocket
[解决办法]
你应该把accept放在线程里.这样程序就不会死了

热点排行