- 系统
windows
- c++ 实现
int iError;
WSADATA WSAData;
if (0 != (iError = WSAStartup (MAKEWORD(2,0), &WSAData)))
{
//此处添加出错处理。。。
}
- c# p/invok
public static bool InitSocket2()
{
WSADATA wsaData = new WSADATA();
int r = WSAStartup(0x0202, ref wsaData);
return r == 0;
}
[DllImport("ws2_32.dll")]
public static extern Int32 WSAStartup(UInt16 wVer, ref WSADATA wsaData);
public struct WSADATA //这样声明结构体
{
public short wVersion;
public short wHighVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
public string szDescription;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
public string szSystemStatus;
[Obsolete]
public int wMaxSockets;
[Obsolete]
public int wMAXUDPDG;
public IntPtr dwVendorInfo;
}
参考:
C#调用C++ DLL WSAStartup怎么转_百度知道 (baidu.com)
- Vanara.PInvoke.Ws2_32
nuget 地址
NuGet Gallery | Vanara.PInvoke.Ws2_32 3.4.16
public sealed class WinSocket2
{
private static Vanara.PInvoke.Ws2_32.WSADATA wsaData;
public static bool InitSocket2()
{
var ret = Vanara.PInvoke.Ws2_32.WSAStartup(2, out wsaData);
if (ret == Win32Error.ERROR_SUCCESS)
return true;
else
return false;
}
}
遇到的问题:
-
NET Core + 项目时,正常使用
-
.Net Framewokr 4.5.2 时,出现异常
“Vanara.PInvoke.Ws2_32”的类型初始值设定项引发异常。