获取侦听端口的远程设备的IP地址

时间:2015-03-29 18:40:31

标签: c# sockets network-programming

我正在使用一个接受JSON字符串命令的远程设备,并根据它接收的25个JSON输入之一给出响应。远程设备在我的LAN上,其中一个命令getIpConfig返回由我的路由器(DHCP)分配的远程设备的IP。

目前,我只知道如何通过Socket与远程设备通信。下面是我知道主服务器的IP地址后我正在使用的代码

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress masterIP = IPAddress.Parse("192.168.1.104");

int port = 8784;

IPEndPoint masterEP = new IPEndPoint(masterIP, port);

s.Connect(masterEP);
Console.WriteLine("Socket connected to {0}.", s.RemoteEndPoint.ToString());

try
{
    string command = Command(Commands.getIpConfig.ToString());

    byte[] msg = Encoding.UTF8.GetBytes(command);
    byte[] bytes = new byte[256];

    //Block until send returns
    int bytesSent = s.Send(msg, SocketFlags.None);

    Console.WriteLine("Sent {0} bytes to {1}.", bytesSent, s.RemoteEndPoint.ToString());

    //Get reply from the master anchor
    int bytesRec = s.Receive(bytes, SocketFlags.None);
    string returnValue = Encoding.UTF8.GetString(bytes);

    GetIpConfig ipConfig = new GetIpConfig();
    ipConfig = JsonConvert.DeserializeObject<GetIpConfig>(returnValue);

    Console.WriteLine("IP Address of the Master is: {0}", ipConfig.ip.ToString());
    Console.ReadLine();
}
catch (SocketException se)
{
    Console.WriteLine(se.Message);
    Console.ReadLine();
}

现在这只有在我知道远程设备的IP地址时才有效。 IP更改,这是DHCP的典型情况。

我的问题是,由于这个远程设备总是在监听端口8784,无论如何都要向这个端口发送数据包,getIpConfig JSON命令并监听响应?一旦得到响应,远程设备将告诉我它在JSON中的IP。然后我可以反序列化它并使用上面的代码通过连接的Socket执行更多命令。

这是我的第一次,所以如果我没有做好一切,我很抱歉。我是C#和一般编程的新手。

0 个答案:

没有答案