C# 发送未知端口的广播
如果我不知道服务器运行的端口,是否可以发送广播以搜索服务器应用程序?还是我必须检查每个端口 为了发送一个简单的广播,我在互联网上找到了以下代码: 服务器C# 发送未知端口的广播,c#,.net,networking,udp,broadcast,C#,.net,Networking,Udp,Broadcast,如果我不知道服务器运行的端口,是否可以发送广播以搜索服务器应用程序?还是我必须检查每个端口 为了发送一个简单的广播,我在互联网上找到了以下代码: 服务器 Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Console.Write("Running server..." + Environment.NewLine); server.Bind(new IPEndPo
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
Console.Write("Running server..." + Environment.NewLine);
server.Bind(new IPEndPoint(IPAddress.Any, 48000));
while (true)
{
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint tempRemoteEP = (EndPoint)sender;
byte[] buffer = new byte[1000];
server.ReceiveFrom(buffer, ref tempRemoteEP);
Console.Write("Server got '" + buffer[0] + "' from " + tempRemoteEP.ToString() + Environment.NewLine);
Console.Write("Sending '2' to " + tempRemoteEP.ToString() +
Environment.NewLine);
server.SendTo(new byte[] { 2 },
tempRemoteEP);
}
客户端
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint AllEndPoint = new IPEndPoint(IPAddress.Broadcast, 48000);
//Allow sending broadcast messages
client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
//Send message to everyone
client.SendTo(new byte[] { 1 }, AllEndPoint);
Console.Write("Client send '1' to " + AllEndPoint.ToString() +
Environment.NewLine);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint tempRemoteEP = (EndPoint)sender;
byte[] buffer = new byte[1000];
string serverIp;
try
{
//Recieve from server. Don't wait more than 3000 milliseconds.
client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout, 3000);
client.ReceiveFrom(buffer, ref tempRemoteEP);
Console.Write("Client got '" + buffer[0] + "' from " +
tempRemoteEP.ToString() + Environment.NewLine);
//Get server IP (ugly)
serverIp = tempRemoteEP.ToString().Split(":".ToCharArray(), 2)[0];
}
catch
{
//Timout. No server answered.
serverIp = "?";
}
Console.Write("ServerIp: " + serverIp + Environment.NewLine);
Console.ReadLine();
但我不知道,我的服务器使用端口48000
发送广播:
var port = 123;
var udp = new UdpClient();
var data = new byte[] { 1, 2, 3 };
udp.Send(data, data.Length, new IPEndPoint(IPAddress.Any, port));
如果您不知道端口,您必须尝试所有端口,我不建议这样做,因为您正在向网络发送垃圾邮件
您想做什么?谢谢,我已经编写了一个应用程序服务器,它将向客户端提供所有数据。由于客户自己在那里安装客户端,我想实现一种“服务器搜索”功能,这样他们只需要从列表中选择应用服务器,所以默认情况下只需使用端口48000。扫描网络中主机的所有65000个端口可能不仅速度慢,而且可能不会让网络管理员满意,因为这种行为会加载网络,还可能会向某些入侵检测系统发出警报。