Leicht OT: mit C# eine telnet-Verbindung zu fhem aufbauen

Begonnen von wowogiengen, 03 Februar 2017, 14:38:55

Vorheriges Thema - Nächstes Thema

wowogiengen

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?

wowogiengen

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.