通过网络广播以进行应用配对

时间:2017-06-05 17:51:59

标签: c# networking

编辑 - 暂停,直到我对我的问题的具体细节进行进一步研究。

我希望创建一个服务,其中同一网络上的两台不同的计算机将运行我的应用程序。如何通过网络广播计算机A正在运行我的应用程序,以便计算机B可以找到它然后开始共享信息。

对我而言,这听起来像套接字,但我从未使用过C#中的本地网络。我不熟悉使用C#的任何形式的发现。

当两个应用都在网络上为合作伙伴进行广播时,我还能看到哪种网络性能问题?

1 个答案:

答案 0 :(得分:1)

您尝试这样做的一种方法是让应用程序在通过UDP连接时将一些数据发送到服务器,从而通知您应用程序正在运行。

然后,您可以存储已连接的客户端列表(我认为这将是List<IPEndPoint>,并在另一个客户端连接后通知所有这些端点。

希望这是有道理的,下面是一个简单的UDP示例,您可以使用它来开始。

注意:如果您从同一台计算机上打开客户端应用程序两次,这将在服务器上注册为2个客户端,因此如果您需要识别唯一的计算机,您可能需要检查这个。

  1. 创建2个控制台应用程序

    • UdpServerExample
    • UdpClientExample
  2. 将以下代码放入服务器Program.cs

    • 这只是创建一个UdpClient对象并告诉它侦听指定的端口(在这种情况下为11000)。
    • 如果收到任何数据,它将被转换为字符串并在发送响应消息之前将字符串打印到控制台。

      var udpServer = new UdpClient(11000);
      
      while (true)
      {
          // Create endpoint and listen on port 11000
          var remoteEP = new IPEndPoint(IPAddress.Any, 11000);
          var data = udpServer.Receive(ref remoteEP);
      
          // Convert the byte array to string and display the client address + message
          var stringData = Encoding.Default.GetString(data);
          Console.WriteLine($"receive data from {remoteEP} - {stringData}");
      
          // Send response back to the client
          var stringToSend = "Message received";
          var bytesToSend = Encoding.Default.GetBytes(stringToSend);
          udpServer.Send(bytesToSend, bytesToSend.Length, remoteEP);
      }
      
  3. 现在将此代码放在客户端Program.cs

    • 这里我们创建一个UdpClient,它使用指定的端口和IP
    • 连接到服务器
    • 然后我们从字符串"Hello, World!创建一个字节数组,并将其发送到整个网络。
    • 从服务器发回的任何响应都会打印到conosole

      // Create udp client and connect using the server IP and specified port
      var client = new UdpClient();
      var ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000); 
      client.Connect(ep);
      
      // Convert string to byte array and send 
      var stringToSend = "Hello, World!";
      var bytesToSend = Encoding.Default.GetBytes(stringToSend);
      client.Send(bytesToSend, bytesToSend.Length);
      
      // Receive the response
      var receivedData = client.Receive(ref ep);
      var receivedString = Encoding.Default.GetString(receivedData);
      
      Console.WriteLine($"receive data from {ep} - {receivedString}");
      
      Console.Read();
      
  4. 您可以通过执行UdpServerExample.exe来测试它,同时在VS中单步执行UdpClientExample

    在客户端调用client.Send(bytesToSend, bytesToSend.Length);之后,您应该在服务器控制台窗口中看到这一点:

    enter image description here

    在客户端控制台中(一旦收到数据):

    enter image description here