我这个BIND函数为什么出错啊

Whynot0072 2019-12-22 01:03:54
我这个SOCKET服务端端的BIND代码在CPP文件跑没有任何问题,但是在MFC当做按钮里面的函数就不行,哪个大神能告诉我出了什么问题啊,非常感谢,代码如下:
void CsocketserverDlg::OnBnClickedButton1()
{
WSADATA wsd;
SOCKET server;
SOCKET sClient;
int retVal;
char buf[64];
//初始化Socket动态数据库
if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
{
AfxMessageBox(_T("WSAStartup failed !\n"));
return ;
}
//创建用于监听的Socket
server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET == server)
{
AfxMessageBox(_T("socket failed !\n"));
WSACleanup();
return ;
}
//设置服务器Socket地址
SOCKADDR_IN addrServ;
addrServ.sin_family = AF_INET;
addrServ.sin_port = htons(9990);
addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
//绑定套接字
retVal = bind(server,(const sockaddr*)&addrServ,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR == retVal)
{
AfxMessageBox(_T("bind failed !\n"));
closesocket(server);
WSACleanup();
return ;
}
//启动监听
retVal = listen(server,1);
if(SOCKET_ERROR == retVal)
{
AfxMessageBox(_T("litsen failed !\n"));
closesocket(server);
WSACleanup();
return ;
}

// TODO: 在此添加控件通知处理程序代码
}
...全文
213 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
许文君 2020-01-07
  • 打赏
  • 举报
回复
1叙述不正确,bind不会阻塞,你放在主线程里也可以,只要把接收/接到 放置到子线程,bind失败请查看 失败的return值,通常是当前端口已被绑定/没有初始化之类的原因,端口可设置重用。
xian_wwq 2020-01-05
  • 打赏
  • 举报
回复
端口被占用了吧?telnet下端口 很有可能是之前调试进程未正常退出导致
Eleven 2019-12-23
  • 打赏
  • 举报
回复
WSAGetLastError()的返回值是什么?
Whynot0072 2019-12-23
  • 打赏
  • 举报
回复
引用 4 楼 Eleven 的回复:
WSAGetLastError()的返回值是什么?
10048
zgl7903 2019-12-22
  • 打赏
  • 举报
回复
失败后 WSAGetLastError() 看错误代码, 再具体分析
Whynot0072 2019-12-22
  • 打赏
  • 举报
回复
引用 1 楼 孤客天涯 的回复:
你要放到线程中去,侦听是一个阻塞过程,你在按钮中把主程序阻死了
那为什么是绑定地址失败…bind失败,而不是程序卡着不动
孤客天涯 2019-12-22
  • 打赏
  • 举报
回复
你要放到线程中去,侦听是一个阻塞过程,你在按钮中把主程序阻死了

18,356

社区成员

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

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