您的位置:首页 > 其它

MFC的DLL中UDP建立连接失败排查

2015-03-25 10:56 190 查看
在MFC应用程序中, 同样的代码, 运行在两个不同的程序下, 其中一个可以顺利通讯, 而另一个却连接失败.代码如下:


BOOL reb = TRUE;

sockaddr_in addrto;
SOCKET linkto;
linkto = socket(AF_INET, SOCK_DGRAM, 0);
addrto.sin_family = AF_INET;
addrto.sin_port = htons(30512);
addrto.sin_addr.S_un.S_addr = inet_addr(strip.c_str());

int res = bind(linkto,(struct sockaddr *)&addrto,sizeof(addrto));
int errornum = WSAGetLastError();
int len = sizeof(sockaddr_in);
int cmdlen = sizeof(CmdInfo);

int sendnum = sendto(linkto, (char *)pcmdinfo, cmdlen, 0, (sockaddr*)&addrto, len);
closesocket(linkto);


WSAGetLastError()返回值 errornum是10093

解释是这样的:

WSANOTINITIALISED (10093)

翻译: 还未执行的成功 WSAStartup。

说明: 是该程序不具有称为 WSAStartup (Wsapiref_1v8y.asp) 或 WSAStartup (Wsapiref_1v8y.asp) 失败。 该程序可能正在访问不属于当前的活动任务的套接字 (也就其试图共享的任务之间的一套接字),或 WSACleanup 调用次数太多。

哦 我懂了! 原来是没有初始化的锅!

于是在MFC程序的入口处Instance中加入如下代码:

WSADATA wsaData;
int nRet;
if((nRet = WSAStartup(MAKEWORD(2,2),&wsaData)) != 0){
TRACE("WSAStartup failed");
exit(0);
}


OK~! 连接顺利建立!

不过不清楚的是 为什么一边可以而另一边不可以 , 还待检查!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐