什么是创建此应用程序的好方法?

时间:2010-11-15 20:19:43

标签: c# messaging

我想创建一个简单的应用程序,列出给定计算机网络上的所有计算机。然后我希望他们能够互相发送消息。很简单。 :)

最简单的方法是什么?

4 个答案:

答案 0 :(得分:2)

这实际上不是自动可行的。在Windows网络上,您可以尝试相当于“网络视图”,它会为您提供客户列表。但是,一般情况下,无法保证计算机是可发现的。有些方法可以像在本地网络中的所有地址上进行nslookup一样工作,但这是一种蛮力,如果计算机没有在DNS中注册其名称也无法正常工作。

假设您已经解决了找出要与之通话的IP地址的问题,那么您需要的是一个套接字(UDP用于数据包或TCP用于流),然后您就可以开始聊天(或者从应用程序向应用程序发送消息)任何有关TCP / IP的介绍都会有例子。

在C#中,使用Socket或UDPClient类非常容易

答案 1 :(得分:1)

列出可用网络的所有计算机:

public void Main()
{
    DirectoryEntry root = new DirectoryEntry("WinNT:");
    DirectoryServices.DirectoryEntries parent = default(DirectoryServices.DirectoryEntries);
    parent = root.Children;
    DirectoryEntries d = parent;
    foreach (DirectoryEntry complist in parent) {
        foreach (DirectoryEntry c in complist.Children) {
            if ((c.Name != "Schema")) {
                Console.WriteLine(c.Name);
            }
        }
    }
}

codeproject 上有一个示例应用程序,可以通过网络发送Windows弹出消息

The NetSend Plus

答案 2 :(得分:1)

在某种程度上,这取决于平台和可用服务。我将假设Windows由于C#标签(虽然,我知道它可能是在Linux上,甚至是由于单声道的iphone)。

如果正确的端口已打开且服务正在运行,您可以使用NET SEND向给定域中的所有计算机广播消息。 (example)。

如果网络发送对您不起作用,那么您至少需要一个能够向任何愿意倾听的人宣布其存在的客户端应用程序。这就是Windows for WorkGroups在很长一段时间内的工作方式。你会想要使用某种类型的UDP广播。

对于更强大的解决方案,您还需要一台客户端登录的服务器。启动时,客户端应用程序将联系服务器并宣布它可用。服务器将记录客户端来自的地址。对于本地聊天服务,这已经足够了。当该客户端收到消息时,服务器将简单地转发它。

不幸的是,由于很多网络限制,这并不总是有效。如果延迟是可以的,那么您可以让每个客户端每隔一段时间检查一次服务器以查看是否有新消息(有点像电子邮件)。

如果高延迟不合适,客户端必须维护一个打开的服务器套接字,以便服务器可以立即发送消息。 (交换的工作方式)。

无论如何,如果客户端分布在多个网络上,或者存在防止发现远程应用程序的安全策略,则服务器选项最佳。顺便提一下,今天的大多数发现机制涉及扫描特定开放端口的本地子网。客户端侦听该端口并响应扫描。我不推荐这种方法。

答案 3 :(得分:0)

可能有一种更简单的方法,但我会把这样的东西变成客户端/服务器应用程序。但问题是您需要在网络上的每台计算机上安装客户端。

但实现是让每个客户端向服务器注册,然后服务器端应用程序将只是处理每个应用程序之间的消息传递的中介。

就像我说的,可能有一种更简单的方法,但我认为你会遇到很多安全问题。