Hallo,
ich versuche gerade mit C# eine telnet-Verbindung zu fhem aufzubauen.
Wenn ich putty verwende, reagiert FHEM erst beim 3. oder 4. mal ENTER-Taste-drücken mit dem prompt.
Wenn ich einen TCPClient verwende um in C# was an den telnet-Port zu senden, und dann auf die Antwort warte, bekomme ich nie eine Antwort:
// entspricht laden und öffnen der Verbindung in putty
TcpClient tc = new TcpClient("fhem2", 7072);
NetworkStream ns = tc.GetStream();
StreamReader sr = new StreamReader(ns);
StreamWriter sw = new StreamWriter(ns);
// Die Return-Taste 3 mal drücken, sollte bereits was zurückkommen
sw.Write("\r\n");
Thread.Sleep(500);
sw.Write("\r\n");
Thread.Sleep(500);
sw.Write("\r\n");
Thread.Sleep(500);
sw.Write("\r\n");
Thread.Sleep(500);
sw.Write("\r\n");
Thread.Sleep(500);
sw.Write("\r\n");
Thread.Sleep(500);
sw.Write("\r\n");
Thread.Sleep(500);
String received = sr.ReadToEnd();
im Log sehe ich nur:
Connection accepted from telnetPort_192.168.188.104_11945
Eigentlich sollte da ja dann sowas wie:
Unknown command try help.
Unknown command , try help.
Messages collected while initializing FHEM:
./log/fhem.save: Please define allowed_telnetPort first
Please define allowed_telnetPort first
Haus Wolfgang & Petra>
zurückkommen.
Aber mein C#-Code hängt in der letzten Codezeile und es kommt keine Reaktion...
Vielleicht kann mir jemand helfen?
Hallo,
nach ein wenig ausprobieren hat es dann doch noch geklappt:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
byte[] command = new byte[1024];
Byte[] buffer = new byte[16];
s.Connect("fhem2", 7072);
command = System.Text.Encoding.ASCII.GetBytes("\r\n");
s.Send(command);
s.Receive(buffer);
String received = System.Text.Encoding.ASCII.GetString(buffer);
Also im Prinzip ganz anderer Ansatz wie mit dem Streamwriter und Reader, aber damit kann man die Bytes 1:1 lesen und schreiben.