编辑 - 暂停,直到我对我的问题的具体细节进行进一步研究。
我希望创建一个服务,其中同一网络上的两台不同的计算机将运行我的应用程序。如何通过网络广播计算机A正在运行我的应用程序,以便计算机B可以找到它然后开始共享信息。
对我而言,这听起来像套接字,但我从未使用过C#中的本地网络。我不熟悉使用C#的任何形式的发现。
当两个应用都在网络上为合作伙伴进行广播时,我还能看到哪种网络性能问题?
答案 0 :(得分:1)
您尝试这样做的一种方法是让应用程序在通过UDP连接时将一些数据发送到服务器,从而通知您应用程序正在运行。
然后,您可以存储已连接的客户端列表(我认为这将是List<IPEndPoint>
,并在另一个客户端连接后通知所有这些端点。
希望这是有道理的,下面是一个简单的UDP示例,您可以使用它来开始。
注意:如果您从同一台计算机上打开客户端应用程序两次,这将在服务器上注册为2个客户端,因此如果您需要识别唯一的计算机,您可能需要检查这个。
创建2个控制台应用程序
UdpServerExample
UdpClientExample
将以下代码放入服务器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);
}
现在将此代码放在客户端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();
您可以通过执行UdpServerExample.exe
来测试它,同时在VS中单步执行UdpClientExample
。
在客户端调用client.Send(bytesToSend, bytesToSend.Length);
之后,您应该在服务器控制台窗口中看到这一点:
在客户端控制台中(一旦收到数据):