我正在创建一个windows桌面应用程序(c#),并试图发送telnet命令,以在单击" on "时切换以太网中继开关。按钮。问题是当我点击按钮时什么也没发生。
*IP: 192.168.1.1
UN: samp
PW: samp*
string command = "relay on 1";
client.Send(Encoding.GetEncoding(command).GetBytes("u" + 'n'));
我准备尝试上面的代码,但没有任何反应。
这是我想转换为c#的原始java代码。
String relayNumber = "2"; //Change the Relay Number here when required
byte[] data = new byte[256];
data = new byte[256];
data = (new String("relay off " + relayNumber + "rn")).getBytes("UTF-8");
System.out.println("Info: Command sent to relay on " + relayNumber);
outstr.write(data, 0, data.length);
如果您想创建一个格式为
的UTF-8编码的命令字符串relay {on|off} {relayNumber}
你可以这样写:
public static byte[] GetRelayCommandBytes(bool onoff, int relayNumber)
{
return System.Text.Encoding.UTF8.GetBytes($"relay {(onoff?"on":"off")} {relayNumber}");
}
我仍然对你在问题中提到的IP地址持怀疑态度。192.168.1.1
是一个比较常见的路由器。
另一个错误来源可能是您正在使用的客户端类型及其设置方式。遗憾的是,到写这篇文章的时候,这个信息还不在问题之列。
我真的不想不尊重,但是给你代码的人可能会重新考虑他的人生选择:
String relayNumber = "2"; //Change the Relay Number here when required
byte[] data = new byte[256]; // <- 1. declaration and assignment of array.
data = new byte[256]; // <- 2. assignment of array!! Why??
// vv- 3. assignment, making the prior 2 completely senseless.
data = (new String("relay off " + relayNumber + "rn")).getBytes("UTF-8");
// ^- my Java is rusty, but I am pretty confident, `new String` is not the best of ideas.
System.out.println("Info: Command sent to relay on " + relayNumber);
// => "Logging" successful transmission, when it didn't even write, yet.
outstr.write(data, 0, data.length);
我只是为你剖析一下,这样你就可以自己做出明智的决定,决定你是否需要自己研究如何与设备对话,而不是依赖于"质量"的代码。作为模板。