如何创建tcpclient到未知的IP地址

时间:2016-02-05 14:54:10

标签: c# tcp ip

我正在使用一个tcpclient数组,我已将不同的设备设置为tcp Server,而我的c#Gui将其作为客户端设置为所有设备。我知道网络中每个设备的每个地址ip,这样我就可以毫无问题地设置每个tcp客户端。那么现在我想要GUI可以识别所有的服务器,而不是我手动设置IP地址。我该怎么做? 我首先想到获取pc的本地IP地址,以便我获得基本网络(完成),然后我想要声明一个tcpclient数组,它试图连接到所有可能的IP地址,但需要很多时间。

public void GetLocalIPAddress() // get the local ip of the pc
{
    IPAddress ip = Dns.GetHostAddresses(Dns.GetHostName()).Where(address => address.AddressFamily == AddressFamily.InterNetwork).First();
    textBox2.Text = ip.ToString();
    string aux = ip.ToString();
    int num = aux.IndexOf(".");
    byte0 = aux.Substring(0,num);
    aux = aux.Substring(num + 1);
    num = aux.IndexOf(".");
    byte1 = aux.Substring(0, num);
    aux = aux.Substring(num + 1);
    num = aux.IndexOf(".");
    byte2 = aux.Substring(0, num);
    aux = aux.Substring(num + 1);

    // if ip Address = 192.168.1.156 ==> byte0 =192 / byte1=168/ byte2=1
}

private void GetConnectedSensoren()
{
    for (int k = 2; k < 254; k++ ) // intialize the tab with all the possible ip Addresses
    {
        myhostName[k] = byte0 + "." + byte1 + "." + byte2 + "."+k;
        try
        {
            myclient[k] = new TcpClient(myhostName[k], portNum);
        }
        catch
        {
            MessageBox.Show("executed here");
        }

    }
}

2 个答案:

答案 0 :(得分:0)

  

如何创建tcpclient到未知的IP地址?

我认为你做不到。

  

现在我想要GUI可以识别所有服务器,而不是我手动设置IP地址

另外,我认为不可能。当然你可以生成这个地址 - 如果你想知道每个客户端都在等待你网络中特定端口的连接......你必须尝试连接到它们中的每一个(当然在这个端口上)。

如果您只想检查地址是否处于活动状态(非特定TCP端口),则可以使用ping并解析输出。但是你仍然需要尝试连接到每台计算机。

计算所有可能的IPv4地址的方法仅在网络掩码为255.255.255.0(/ 24)时有效,但如果您有其他掩码,则会失败。有几种方法可以计算子网中的主机。请尝试上述hereherehere之一。希望它有所帮助:)

编辑: 这里:How to get IP of all hosts in LAN?你有一个非常好的解决方案,可以缩短ping响应时间,这样你就可以在一秒钟内测试到255台计算机的连接:)

答案 1 :(得分:0)

正如@badsamaritan所说,无法将数据发送到地址未知的目的地。如果邮件中没有写入您的地址,您也无法收到邮件。

但是你可以使用一些技巧来实现你的目标:

  1. 反复试验。这意味着您尝试连接到每个可能的IP地址,这远远超过您的子网。如果您希望能够在每个网络中使用此程序,则必须考虑网络可能使用连接不同子网的路由器。在您自己的家庭局域网中,情况可能更容易。在这两种情况下,它基本上都像IP扫描,耗时且容易出错。

  2. 从您的客户端发送UDP广播。数据包含客户端的IP地址。服务器通过UDP使用自己的IP回复客户端。然后,您可以像往常一样建立到服务器的TCP连接。但是,也存在困难:

      如果服务器关闭,
    • 服务器将不会响应。如果你不知道服务器数量,你就会错过它们。
    • 某些路由器不转发广播。
  3. 使用与TCP / IP或UDP / IP完全不同的通信协议。如果该协议没有IP地址,那么您不需要知道它。还有其他协议,但TCP / IP是事实上的标准。不要忘记:您的操作系统需要支持它。