2

我可能希望通过网络发送一个数据包或某种请求,但不是针对任何特定的。一台机器或可能的多台机器将安装一个软件来监听这个特定的数据包或请求和响应。大型机服务器将知道它也有 x 台服务器来分担工作。

我可以使用某种形式的 UDP 广播或 TCP 数据包来实现这种事情吗?我将使用 C# .NET 来执行此操作。

这个问题的最终结果将是拥有一个主服务器,它有任务要完成,但如果有的话,它喜欢在多台机器上共享工作,但它永远不会知道关于它们的任何事情。它会发出请求说“我需要完成一些工作”,机器会响应“我空闲”+ IP 地址,然后主机将能够使用 TCP 连接来交付工作(我可以轻松实现这部分) . 我只需要通过网络发出初始盲请求。

我希望这是有道理的,如果我必须想出另一种方法让主机知道它的所有工人,那么我会,但我也不希望。

谢谢

史蒂夫

4

3 回答 3

5

听起来您想要进行多播,这可以通过 UDP 而不是 TCP 很好地完成。

我发现一篇文章描述了你会如何做这样的事情。

http://www.codeproject.com/Articles/1705/IP-Multicasting-in-C

于 2012-09-18T19:09:15.883 回答
3

您可以尝试使用此代码 - 基于TcpClient

            TcpClient tcpclnt = new TcpClient();
            Console.WriteLine("Connecting.....");

            tcpclnt.Connect("...",8001);
            // use the ipaddress as in the server program

            Console.WriteLine("Connected");
            Console.Write("Enter the string to be transmitted : ");

            String str=Console.ReadLine();
            Stream stm = tcpclnt.GetStream();

            ASCIIEncoding asen= new ASCIIEncoding();
            byte[] ba=asen.GetBytes(str);
            Console.WriteLine("Transmitting.....");

            stm.Write(ba,0,ba.Length);

            byte[] bb=new byte[100];
            int k=stm.Read(bb,0,100);

            for (int i=0;i<k;i++)
                Console.Write(Convert.ToChar(bb[i]));

            tcpclnt.Close();
于 2012-09-18T19:11:16.390 回答
1

您可能会考虑使用ZeroConf(又名Apple Bonjour,Apple 有适用于 Windows 的 Bonjour SDK)。ZeroConf/Bonjour 的一部分是服务发现。其 RFC 是:

这两个 RFC 都是 IETF 提议的标准。

这是关于它的维基百科文章:http ://en.wikipedia.org/wiki/Zero_configuration_networking

此外,Daniel Steinberg 和 Stewart Cheshire 所著的 O'Reilly 书《零配置网络:权威指南》将大部分相关信息收集在一个地方。

封面

于 2012-09-18T22:18:55.247 回答