我正在使用C#套接字在设备(客户端)和计算机(服务器)之间建立连接。 一切都很好,除了我试图避免用户输入设备上连接的IP地址和端口号这一事实。相反,我想要一个列表框或下拉列表中的所有IP地址与侦听套接字。只是想知道是否有办法获得监听(套接字)主机的所有IP地址和端口号?
感谢您的帮助! :)
答案 0 :(得分:2)
您要求做的是称为端口扫描。它主要涉及测试范围和每个端口中的每个IP地址,并报告该尝试的成功。它很慢,如果网络上有任何类型的威胁监控,它会引起很多警报,因为端口扫描是攻击者试图找到网络漏洞的方式之一。
所以简而言之,这是一个坏主意,可能不会足够响应你用于此目的。相反,您可能会考虑使用中央服务器作为每个服务器将注册的“目录”。
或者您可以在子网上send out a broadcast并等待服务器响应。这就是一些对等网络在Windows中的工作方式。请注意,这假设您也是服务器的开发人员,您可以添加服务器监听广播所需的逻辑。
答案 1 :(得分:0)
通过使用UDP广播,您可以将数据发送到正在侦听固定端口的服务器。以下是工作示例。
foreach (IPAddress ip in allLocalNetworkAddresses.AddressList)
{
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//Allow sending broadcast messages
client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
//Create endpoint, broadcast.
IPEndPoint AllEndPoint = new IPEndPoint(IPAddress.Broadcast, Port);
byte[] sendData = Encoding.ASCII.GetBytes("1");
//Send message to everyone on this network
client.SendTo(sendData, AllEndPoint);
Console.Write("Client send '1' to " + AllEndPoint.ToString() +
Environment.NewLine);