批量网络发送






3.96/5 (11投票s)
2004年3月24日
2分钟阅读

110678

2092
向多个收件人发送网络消息。
引言
本文展示了如何使用平台调用和 Windows 网络函数发送多个网络消息。
背景
几周前,我感到需要发送多条网络消息。 在通过 Windows 命令提示符发送它们一段时间后,我认为应该有更简单的方法。 因此,我在互联网上找到了一些批量网络发送 GUI,它们暂时解决了问题。 但这让我好奇,这些 GUI 背后的代码是什么样的? 所以我在 CodeProject 上搜索,找到了一位贡献者发布的类似文章,该文章为 net send 提供了一个前端。 但在查看源代码后,我意识到它所做的只是生成一个包含 net send 命令和消息的 .bat 文件,并在 shell 上执行它。 我尝试复制这个想法,但没有使用 .bat 文件,所以我发现了一个 Windows 函数,它完全实现了我想要的功能。 NetMessageBufferSend
函数。
使用代码
为了调用 Windows 函数,使用了平台调用。 这使我能够使用 C# 作为开发语言,而不是必须使用 MFC 或 Win32 API。 此代码基本上调用两个主要函数。 NetMessageBufferSend
用于发送消息,NetServerEnum
用于提取网络中可用计算机的列表。
//
// Invoking the NetServerEnum function
//
int ret = NetServerEnum(null,101,out buf,-1,
ref entriesread,ref totalentries,
SV_101_TYPES.SV_TYPE_WORKSTATION,null,0);
SERVER_INFO_101 server = (SERVER_INFO_101)
Marshal.PtrToStructure(new IntPtr(ptr),typeof(SERVER_INFO_101));
NetServerEnum
函数根据传递的第二个参数返回不同类型的结构。 在这种情况下,我们想要 SERVER_INFO_101
结构中包含的信息,因此传递了参数 '101'。 entriesread
和 totalentries
变量分别存储此函数调用返回的条目数以及网络中该类型服务器的总数。 SV_TYPE_WORKSTATION
告诉函数我们想要列出的服务器类型。 在选择要发送消息的工作站后,就可以调用 NetMessageBufferSend
函数了。
//
// Invoking the NetMessageBufferSend function
//
int nRet = NetMessageBufferSend(null,
treeView1.Nodes[i].Text, from, textBox1.Text,
textBox1.Text.Length * 2 + 2);
历史
- 2004/03/22 初始版本