Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送未知端口的广播_C#_.net_Networking_Udp_Broadcast - Fatal编程技术网

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个端口可能不仅速度慢,而且可能不会让网络管理员满意,因为这种行为会加载网络,还可能会向某些入侵检测系统发出警报。