我這個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: 在此添加控制元件通知處理程式代碼
}
uj5u.com熱心網友回復:
你要放到執行緒中去,偵聽是一個阻塞程序,你在按鈕中把主程式阻死了uj5u.com熱心網友回復:
那為什么是系結地址失敗…bind失敗,而不是程式卡著不動uj5u.com熱心網友回復:
失敗后 WSAGetLastError() 看錯誤代碼, 再具體分析uj5u.com熱心網友回復:
WSAGetLastError()的回傳值是什么?uj5u.com熱心網友回復:
10048uj5u.com熱心網友回復:
https://blog.csdn.net/qllwenhua/article/details/2419208uj5u.com熱心網友回復:
埠被占用了吧?telnet下埠很有可能是之前除錯行程未正常退出導致
uj5u.com熱心網友回復:
1敘述不正確,bind不會阻塞,你放在主執行緒里也可以,只要把接收/接到 放置到子執行緒,bind失敗請查看 失敗的return值,通常是當前埠已被系結/沒有初始化之類的原因,埠可設定重用。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/25272.html
標籤:網絡編程
下一篇:C#與MSstudio
