服务程序的线程中WSAStartup初始化成功,创建SOCKET报10093错误

Seagate_64 2012-03-31 03:54:59
一个服务程序,在线程加入提供网络服务,使用控制台程序,程序不会出错
WSADATA wsaData;
int wsaret=WSAStartup(MAKEWORD(2,2),&wsaData);
if(wsaret!=0)
{//此处不报错
return ;
}

sockaddr_in local;

local.sin_family=AF_INET;
local.sin_addr.s_addr=INADDR_ANY;
local.sin_port=htons((u_short)20248);
server=socket(AF_INET,SOCK_STREAM,0);
if(server==INVALID_SOCKET)
{
//到此处报10093的错误
...全文
326 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seagate_64 2012-04-05
  • 打赏
  • 举报
回复
WSAStartup()初始化,放在main函数的开始阶段,调试成功了
刚开始放在线程中初始化的,怎么调试也不行,但提示是WSAStartup
调试成功,怀疑是在系统服务程序中线程的问题,某些东西没有搞明白。
Joseph-Growth 2012-04-05
  • 打赏
  • 举报
回复
WSAStartup放在线程函数所属的主线程(进程中)定义,在主线程(进程)结束时再释放。WSAStartup实际上是加载DLL。
Seagate_64 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
重新建个工程,在下一步的时候选择 windows socket
[/Quote]
创建的是系统服务程序,没有使用MFC,应该是服务程序对网络这一块有特殊的要求,我感觉,因为同样的代码在非服务程序上运行是不出错的
shn521 2012-03-31
  • 打赏
  • 举报
回复
重新建个工程,在下一步的时候选择 windows socket
Seagate_64 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
bool InitWinSocket()
{
WSADATA wsd;
if ( 0 != WSAStartup(MAKEWORD(2,2), &wsd) )
{
return false;
}
if ( 2 == LOBYTE(wsd.wVersion) && 2 == HIBYTE(wsd.wVersion) )
{
return true;
}
……
[/Quote]
试过了 可以确定WSAStartup()初始化正确 不解为何出现错误
Joseph-Growth 2012-03-31
  • 打赏
  • 举报
回复
bool InitWinSocket()
{
WSADATA wsd;
if ( 0 != WSAStartup(MAKEWORD(2,2), &wsd) )
{
return false;
}
if ( 2 == LOBYTE(wsd.wVersion) && 2 == HIBYTE(wsd.wVersion) )
{
return true;
}
return false;
}
wsd的版本信息如果不是2.2的话,WSAStartup还是失败的。
Seagate_64 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
local.sin_addr.s_addr=INADDR_ANY;
local.sin_addr.S_un.S_addr=INADDR_ANY; 改成这句了
[/Quote]
试过了 ,还是出错 ,我在控制台程序使用同样的代码,不会出错,真是奇怪
shn521 2012-03-31
  • 打赏
  • 举报
回复
local.sin_addr.s_addr=INADDR_ANY;
local.sin_addr.S_un.S_addr=INADDR_ANY; 改成这句了
shn521 2012-03-31
  • 打赏
  • 举报
回复
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=INADDR_ANY;
addr.sin_port=htons(4000);
m_hSocket=socket(AF_INET,SOCK_STREAM,0);
Seagate_64 2012-03-31
  • 打赏
  • 举报
回复
有道理,服务程序这一块我不太熟悉,能不能详细一些
oyljerry 2012-03-31
  • 打赏
  • 举报
回复
服务程序权限更高,也会运行在session0,注意这些跟普通应用程序的区别
shn521 2012-03-31
  • 打赏
  • 举报
回复
IP呢
Seagate_64 2012-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
10093:应用程序没有调用 WSAStartup,或者 WSAStartup 失败。
[/Quote]
WSAStartup在同一个线程中调用成功了,接下来就是socket调用,怎么会出现10093呢?
shn521 2012-03-31
  • 打赏
  • 举报
回复
10093:应用程序没有调用 WSAStartup,或者 WSAStartup 失败。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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