【问题标题】:how to create tcpclient to unknown ip address如何创建 tcpclient 到未知 IP 地址
【发布时间】:2016-05-15 14:25:37
【问题描述】:

我正在使用 tcpclient 数组,我已将不同的设备设置为 tcp 服务器,我的 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");
        }

    }
}

【问题讨论】:

    标签: c# tcp ip


    【解决方案1】:

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

    我认为你不能这样做。

    现在我希望 GUI 可以识别所有服务器,而无需我手动设置 IP 地址

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

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

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

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

    【讨论】:

    • 一个局域网可以有不同的子网,由路由器连接。因此,您必须扫描的不仅仅是您自己的子网...
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2011-04-05
      • 2015-06-22
      相关资源
      最近更新 更多