Articles of networking

Windows对每台机器同时打开的套接字/连接数量的限制

比方说,我有一个真正的networking接口和几个回环接口的Windows 7。 我有IOCP启用服务器接受来自客户端的连接。 我试图尽可能模拟真正的客户端连接到服务器。 我的客户端代码只是build立了X个套接字连接(注意客户端绑定到给定的接口): const Int32 remotePort = 12345; const Int32 MaxSockets = 60000; Socket[] s = new Socket[MaxSockets]; IPEndPoint bindEndpoint = new IPEndPoint(IPAddress.Parse(args[0]), 0); for (Int32 i = 0; i < MaxSockets; i++) { s[i] = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s[i].SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); s[i].Bind(bindEndpoint); s[i].Connect(args[1], remotePort); IPEndPoint socketInfo = (IPEndPoint)s[i].LocalEndPoint; Console.WriteLine(String.Format("Connected socket {0} […]

检测IPv6是否在Windows机器上启用

我写了一个PowerShell脚本,将作为我们的服务器构build一致性testing。 我需要做的事情之一是检测IPv6networking是否被禁用。 WMI表示此信息可以在Win32_NetworkAdapterConfiguration的IPAddress属性中find,但可以是IPv6或IPv4。 这不是给我一个我希望find的“是/否”的答案。 其他的注意事项是,我不希望通过直接访问registry来刮擦细节,也不会从ipconfig等命令的输出中刮擦。 鉴于我们的环境混合了2003/2008年的机器,任何人都可以想办法testingIPv6吗? 干杯

FileSystemWatcher停止监视networking文件夹

我已经开发了文件队列系统,其中来自不同Windows机器的多个应用程序观察相同的映射networking驱动器以进行文件更改并继续文件。 为了观察映射驱动器的变化,我使用FileSystemWatcher(c#.NET 4.0),一切工作正常后的一天FileSystemWatcher停止监视。 我试图玩FileSystemWatcher.Error事件来捕捉exception,如果有的话。 不幸的是错误事件并不总是被激发 。 我没有find解决问题的方法,FileSystemWatcher停止工作,没有错误抛出。 任何build议?

在WinSock2.h重新定义错误

包括winsock2.h,在一个项目的文件中。 获取许多错误 – WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition 与相应的 – WinSock.h(54) : see declaration of 'fd_set' 我没有看到任何头文件中包含winsock.h。 项目中是否有可能造成这种情况? 编辑 但是,我在另一个文件中使用windows.h: http://cboard.cprogramming.com/windows-programming/41212-strange-msvc-winsock2-compile-error.html 编辑2 在头上我有: #include <winsock2.h> #include <iphlpapi.h> #include "\MyFiles\FileX.h" <-which #include <windows.h>

在Windows中保留一个TCP端口

我想保留一个TCP端口,稍后再被一个服务绑定,以便Windows在分配随机端口号时不会无意中使用相同的号码。 我知道这是可能的通过registry和重新启动,但我想避免这样一个严重的解决scheme。 一个进程如何在不实际绑定/监听的情况下保留一个端口,然后安全地(即避免竞态条件)根据请求将其交给另一个进程? 端口号不需要事先确定。 第一个进程可以获得一个随机的端口号,并将其传递给请求进程。 编辑:它发生在我身上,我的问题是有点陈述。 我真正想要的是将dynamic端口号的分配从bind-to-port-zero操作中分离出来。 这意味着不仅要避免意外的随机分配该端口号,而且还要防止在此期间任何其他进程绑定到相同的地址/端口。 换句话说,我想让一个进程启动bind-to-port-zero操作 – 立即学习将被使用的端口号 – 并让指定的第二个进程在将来完成绑定操作。 目前,我能想到的最接近的解决方法是,第一个进程立即绑定到地址/ 0,并保持绑定,直到第二个进程请求它,此时解除绑定并告知其他进程的端口号获得,然后明确绑定到地址/端口。 这有两个问题:1)我宁愿不要束缚,直到第二个过程出现。 2)第三方可能意外(或故意)篡夺港口的时间间隔很短。 背景 你可能会好奇我为什么要做这么奇怪的事情。 我一直在玩ZeroMQ,一个主要的限制是没有Windows上的ipc://传输。 令我感到震惊的是,端口映射器进程(类似于RPC端点映射器,或者Erlang的epmd)只是使用具有dynamic端口分配的tcp:// transport来实现解决scheme的票据。 然而,ZeroMQ客户端和服务器被允许连接不顺序(即在服务器绑定之前,客户端连接不是错误的),所以我试图找出连接客户端如何发现 – 一个非常高度确定性 – 在服务器实际绑定到端口之前将用于通信的端口。

CancelSynchronousIo与WNetAddConnection2一起使用吗?

我正在尝试并取消与CancelSynchronousIo对WNetAddConnection2的调用。 对CancelSynchronousIo调用成功,但没有任何事实上被取消。 我正在使用在Windows 7 x64上运行的32位控制台应用程序。 有没有人做到这一点成功? 我在做什么愚蠢的事情? 以下是一个示例控制台应用程序(需要与mpr.lib链接): DWORD WINAPI ConnectThread(LPVOID param) { NETRESOURCE nr; memset(&nr, 0, sizeof(nr)); nr.dwType = RESOURCETYPE_ANY; nr.lpRemoteName = L"\\\\8.8.8.8\\bog"; // result is ERROR_BAD_NETPATH (ie the call isn't cancelled) DWORD result = WNetAddConnection2(&nr, L"pass", L"user", CONNECT_TEMPORARY); return 0; } int _tmain(int argc, _TCHAR* argv[]) { // Create a new thread to […]

时间函数在mingw

我正在尝试执行此页面中给出的代码 http://msdn.microsoft.com/en-us/library/windows/desktop/aa366062%28v=vs.85%29.aspx 我正在使用mingw(gcc)来编译这个。 但下面的行不能被编译。 我已经包含了'time.h'。 我search,但无法find这个'_localtime31_s'或其等价物在gcc中。 error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained); error = asctime_s(buffer, 32, &newtime); 这里的时间在哪里? 谢谢

以编程方式确定用户在Windows上最后修改文件的用户?

我一直负责在C#中编写一个简单的命令行实用程序,该实用程序将监视多个用户将访问的服务器上的目录以复制/剪切/粘贴/查看数据。 我使用FileSystemWatcher来做到这一点,但缺乏一些function。 是否有可能确定用户或至less从文件被访问/修改的位置计算机名称 ? (注意:这不一定要用FileSystemWatcher,我正在寻找任何方法来做到这一点。)

以编程方式在Windows 7上使用.NET创build/销毁网桥

我试图以编程方式创build和销毁Windows 7上的网桥。 在技​​术上,我很乐意留在.NET 4领域(PInvokes很好,ofc),但是使用C ++是一个select。 到目前为止,我的研究发现,对于configuration, netsh命令是要走的路线 。 然而,似乎没有select与他们搭起一座新的桥梁。 我目前正在研究这个使用INetCfg API的程序,但是看起来这个程序,或者更具体的API,不能(再)build立一个新的桥接。 如果有人能够帮助解决这个问题,任何forms的帮助都是非常感谢的。 [更新:]看来,蝾螈桥梁实施使用驱动程序,然后绑定到两个设备。 我还不能提供大部分的信息,所以还是有任何帮助。

如何防止出现新的连接的networking位置对话框(家庭,工作,公共)?

如果连接不存在,我写了一个使用USB 3G Dongle连接到互联网的软件。 当软件加载时,它检测互联网是否可用,如果没有,则创build拨号连接(通过RAS),然后拨打它。 如果这是第一次发生,networking位置对话框出现,要求用户select是否在家,工作或公共。 有无论如何,我可以编程方式设置连接的networking位置,甚至告诉Windows不显示对话框,并自动将位置设置为公共? 干杯 加文 编辑:对于ScottM public bool Connect(bool monitorSignalUpdates) { RasPhoneBook rpb = new RasPhoneBook(); rpb.Open(true); if (!rpb.Entries.Contains("3G Connection")) { rpb.Entries.Add(RasEntry.CreateBroadbandEntry("3G Connection", RasDevice.GetDeviceByName("HUAWEI Mobile Connect – 3G Modem", RasDeviceType.Modem), true)); } _rd = new RasDialer(); _rd.EntryName = "3G Connection"; _rd.PhoneNumber = "*99#"; try { _rd.Dial(); if (monitorSignalUpdates) { _queryPort.DataReceived += new […]