void CMyIMServerDlg::OnOK() //启动服务器
{
// TODO: Add extra validation here
if (InitWinsock())
{
MessageBox("成功初始化winsock");
}
else
{
MessageBox("初始化winsock失败");
CDialog::OnOK();//退出
} //创建用于监听的socket
SOCKET ListenSocket=MakeSocket(SOCK_DGRAM);
SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addSrv.sin_family=AF_INET;
addSrv.sin_port=htons(SERVER_PORT); int result=bind(ListenSocket,(const sockaddr *)&addSrv,sizeof(SOCKADDR));
if (result==0)
{
MessageBox("服务器套接字绑定成功");
}
else
{
MessageBox("服务器套接字绑定失败");
CDialog::OnOK();//退出
} SOCKADDR_IN addClient;
int length=0;
char temp[50];
while (1)
{
//SOCKET newConnect=accept(ListenSocket,(SOCKADDR *)&addClient,&length);
// if (newConnect!=INVALID_SOCKET )
// {
// MessageBox("受到客户端请求");
// sendto(newConnect,"欢迎注册",strlen("欢迎注册")+1,0,(SOCKADDR *)&addClient,length);
// }
int a= recvfrom(ListenSocket, (char *)&temp, sizeof(temp), MSG_PEEK, (sockaddr *)&addClient, &length);
if(a <= 0)
{
MessageBox("接受数据出错");
continue;
}
else
{
MessageBox(temp);
}
Sleep(10000); }
// CDialog::OnOK();
}
我没有启动客户端,只启动服务器端,但是recvfrom函数不阻塞,而是循环弹出提示框:“接受数据出错”,最后导致程序卡死,这是什么原因啊,我客户端都没有启动,更别提给服务器发送数据了
MSDN上面的说明是当没有数据来的时候,这个函数会自动阻塞
请教各位前辈!!!
{
// TODO: Add extra validation here
if (InitWinsock())
{
MessageBox("成功初始化winsock");
}
else
{
MessageBox("初始化winsock失败");
CDialog::OnOK();//退出
} //创建用于监听的socket
SOCKET ListenSocket=MakeSocket(SOCK_DGRAM);
SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addSrv.sin_family=AF_INET;
addSrv.sin_port=htons(SERVER_PORT); int result=bind(ListenSocket,(const sockaddr *)&addSrv,sizeof(SOCKADDR));
if (result==0)
{
MessageBox("服务器套接字绑定成功");
}
else
{
MessageBox("服务器套接字绑定失败");
CDialog::OnOK();//退出
} SOCKADDR_IN addClient;
int length=0;
char temp[50];
while (1)
{
//SOCKET newConnect=accept(ListenSocket,(SOCKADDR *)&addClient,&length);
// if (newConnect!=INVALID_SOCKET )
// {
// MessageBox("受到客户端请求");
// sendto(newConnect,"欢迎注册",strlen("欢迎注册")+1,0,(SOCKADDR *)&addClient,length);
// }
int a= recvfrom(ListenSocket, (char *)&temp, sizeof(temp), MSG_PEEK, (sockaddr *)&addClient, &length);
if(a <= 0)
{
MessageBox("接受数据出错");
continue;
}
else
{
MessageBox(temp);
}
Sleep(10000); }
// CDialog::OnOK();
}
我没有启动客户端,只启动服务器端,但是recvfrom函数不阻塞,而是循环弹出提示框:“接受数据出错”,最后导致程序卡死,这是什么原因啊,我客户端都没有启动,更别提给服务器发送数据了
MSDN上面的说明是当没有数据来的时候,这个函数会自动阻塞
请教各位前辈!!!
解决方案 »
- 关于BitBlt的使用
- CWebBrowser2 如何动态拉伸?
- 在windows中html页面调用ocx问题
- 请问大家碰到SetupDiEnumDeviceInterfaces总返回0时都是什么原因啊?
- ====谁用过naughter写的CTreeFileCtrl,为什么我运行后会出现异常呢?====
- 谁给我P2P的例子,我给100分
- ★★★★★★★怪!使用extern "C" 出错syntax error "string"★★★★★★★
- 什么时候使用应用,什么时候使用指针,它们的区别是什么?
- 兼容性DC的问题 一下代码不显示OnDraw的东西
- 如何在VC中使用汇编
- 求助:关于MFC的设计思想
- LINK : fatal error LNK1104: cannot open file F:\Program Files\HTML Help Workshop\lib\htmlhelp.lib",不在F盘了,却还显示在F盘?为什么呢?
改为int length=sizeof(SOCKADDR);后没有了弹出提示框,说明已经阻塞了,但是还是卡死,个人猜想是要另外开个线程处理,先试试这个吧!