65.9K
CodeProject 正在变化。 阅读更多。
Home

批量网络发送

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.96/5 (11投票s)

2004年3月24日

2分钟阅读

viewsIcon

110678

downloadIcon

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'。 entriesreadtotalentries 变量分别存储此函数调用返回的条目数以及网络中该类型服务器的总数。 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 初始版本
© . All rights reserved.