问题标签 [wsastartup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2950 浏览

c++ - 静态包装库(用于 winsock),未定义对 XXX 的引用

我想编写一个静态库,它使用来自 winsock api(winsock 包装库)的函数。我包括 libws2_32.a 并添加编译器选项 -lws2_32。现在当我在另一个项目中链接到这个库时,它给了我这些错误:

对于我在我的库中使用的各种 winsock 函数。我在包含库的项目中包含了 libws2_32.a 并添加了选项 -lws2_32。我正在使用 CodeBlocks IDE 和 MinGW 64 位编译器。我怎样才能解决这个问题?甚至可以编写这样一个静态包装库吗?

编辑 1我删除了编译器选项 -lws2_32 并且新的构建日志看起来像这样。但是,它仍然具有对 winsock 函数错误的未定义引用。

编辑 2我尝试在包含我的静态库的项目中调用 WSAStartup(ws2_32 中的 winsock 函数),并且使用编译器选项 -lws2_32 可以正常工作。实际上现在(当我在项目“Stock”中调用 WSAStartup 时)对于包含的静态库也不会抛出对 WSAStartup 函数的未定义引用错误。但是,所有其他 winsock 函数仍然存在此错误。

0 投票
3 回答
3695 浏览

c++ - C++:gethostname() 失败

我需要获取使用gethostname函数的系统主机名

但它以错误代码10093失败,即

WSANOTINITIALISED 10093

尚未执行成功的 WSAStartup。应用程序没有调用 WSAStartup 或 WSAStartup 失败。应用程序可能正在访问当前活动任务不拥有的套接字(即,尝试在任务之间共享套接字),或者 WSACleanup 已被调用太多次。

下面是我的程序代码:

什么可能导致此失败?


编辑

在 gethostname 函数调用之前添加以下代码解决了这个问题。

0 投票
2 回答
2099 浏览

c# - 如何在 C# 中调用 WSAStartup()(在 Windows Phone 7 上)?

目标:获得一个 Windows Phone 7 名称(如“我的 Windows Phone”)。

铅:http: //blogs.msdn.com/b/andypennell/archive/2013/11/09/getting-the-name-of-your-windows-phone-8-device.aspx

以上代码以 C++ 形式提供,我想将其更改为 C#。一个原因是因为我只有 Visual Studio 2012 Express,它不允许我将 C++ 与 Windows Phone 项目一起使用,而且我已经购买了 VS2013,为此买不起 VS2012。另一个原因是 C++ 中有超过 150 个依赖文件,代码太多了!

所以,我的第一次尝试:(灵感来自http://www.experts-exchange.com/Programming/Languages/.NET/Q_21014265.html

它失败并WSAStartup(0x0002, out dummy);出现异常:

MyLibrary.dll 中出现了“System.MethodAccessException”类型的第一次机会异常

附加信息:尝试访问该方法失败:MyLibrary.WSAStartup(System.Int16, .WSAData&)

我的第二次尝试:(灵感来自Convert service name to port

它失败并NativeMethods.WSAStartup(0x0202, ref dummy);出现异常:

MyLibrary.dll 中出现了“System.MethodAccessException”类型的第一次机会异常

附加信息:尝试访问方法失败:MyLibrary+NativeMethods.WSAStartup(System.Int16, .WSAData&)

有什么建议可以让它在 WP7 设备上运行吗?

[编辑:这篇文章还建议版本 0x0101 使用 WSAStartup() 的可能性]

0 投票
1 回答
394 浏览

c# - 3 次成功调用后,Web 服务调用导致 WSAStartUp 错误

我有一个 C# winforms 应用程序,它通过 .DLL 作为某些访问设备的服务器。

用户访问是通过将输入发送到 Web 服务(设置为 Web 引用)并将结果返回到设备来确定的,但是在超时的情况下,应用程序会断开所有设备,停止服务器并启动后台工作程序。后台工作人员重试与 Web 服务的连接,如果成功,则再次启动服务器并重新连接设备。

这一切都很好,但不幸的是,在第三四次或第五次,backgroundworker 尝试重新连接到 web 服务,连接失败并出现异常"Either the application has not called WSAStartup, or WSAStartup failed"。每次以下尝试,都会得到一个类似的错误。

这是 backgroundworker 的源代码,它的代码非常简单:

附带说明一下,Web 服务在其他方面就像一个魅力。

0 投票
1 回答
848 浏览

windows-ce - 不调用 WSACleanup 的后果

我正在设计将在无头 Windows CE 6.0 设备上运行的应用程序。这个想法是制作一个将在启动时启动并运行直到断电的应用程序。(基本上它看起来像一个服务,但应用程序更容易调试,而无需完全麻烦停止/部署/启动/附加到处理过程)

我担心的是在开发过程中会发生什么。如果我调试/部署应用程序,我看不到以友好和简单的方式关闭它。(请随意建议这是否可以以更好/用户友好的方式完成)我将停止调试器,结果将是 WSACleanup 未被调用。

现在,问题。不调用 WSACleanup 的后果是什么?我可以使用调试器再次启动和运行 winsock 应用程序吗?或者会不会有资源泄漏阻止我这样做?

在此先感谢,杰夫

0 投票
0 回答
821 浏览

windows - 程序退出前是否需要调用WSACleanup

我有一个调用WSAStartup. WSACleanup程序退出前是否需要调用?如果我不这样做,会不会有任何负面影响?特别是:

不同于仅仅exit(0)。我意识到在 Win16 上省略WSACleanup会泄漏系统资源,情况仍然如此。

0 投票
4 回答
858 浏览

c++ - WSAStartup with RAII

  1. RAII 调用时不执行析构函数exit。所以WSACleanup 不运行。有什么问题?我发现 没有任何libnet使用,为什么?WSAStartupWSACleanup
  2. WSAStartup一个进程可以调用多次,那怎么保证 WSACleanup够用呢?
  3. 如何使用WSAStartupWSACleanup简单又优雅?
  4. 另外我写了这个测试代码进行测试,WSAStartup没有 WSAClean发现任何异常(内存增长或崩溃......)

代码:

0 投票
2 回答
757 浏览

c# - .NET 使用 WSAStartup 对 64 位应用程序安全吗?

对于 64 位应用程序,.NET Framework 版本和 WSAData 结构的本机 Win32 版本之间存在不匹配,因为字段的顺序不同。我复制了 .NET 版本以用于我们基于 C# 的产品,一位同事担心我导致了内存损坏。使用 DllImport / PInvoke 时是否存在由于这种不匹配而导致内存损坏的风险?将本机版本编组到托管版本时是否存在无效内存访问的风险?假设我不关心实际访问生成的 WSAData 对象的字段。我只是想确定我对 WSAStartup 的调用不会破坏内存或使应用程序崩溃。

这是 WinSock2.h 中的本机 C++ 版本。请注意,成员的顺序在 64 位和 32 位中是不同的。WSADESCRIPTION_LEN 为 256,WSASYS_STATUS_LEN 为 128。

这是.NET Framework 中的托管版本

0 投票
0 回答
266 浏览

c# - 使用 C# 时初始化 WinSock?

我对使用 DLL 的 C# 应用程序有问题,该 DLL 本身打开 TCP/IP 连接。我的问题:从 C# 调用时,此 DLL 不起作用。

我从其他应用程序中知道WSAStartup()必须调用一个函数来初始化 Winsock。

C# 是否需要类似的东西?

谢谢!

0 投票
1 回答
850 浏览

c# - Pinvoke / 从 C# 调用本机 Windows API 函数

在我的 C# 应用程序中,我使用外部 DLL 的函数。此 DLL 本身使用网络功能。所以有必要从我的 C# 应用程序中初始化 Winsock 以让网络套接字为这个 DLL 工作。这就是我尝试执行 WSAStartup 进行初始化的方式,但它似乎不起作用:

WSAStartup() 似乎调用成功,但使用的 DLL 仍然无法访问网络。所以似乎 WSAStartup() 出于某种原因没有工作。有什么想法我在这里做错了吗?

亲切的问候

迈克尔