我正在使用一个接受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#和一般编程的新手。