Server ansprechen

08/11/2009 - 09:07 von Lars Müller | Report spam
Hallo,

ich hatte bereits gefragt:



ich muss eine externe, über USB angeschlossene Hardware ansprechen (USB




Interface von Lenz, Modellbahn). Als Kommunikationshilfe wird auf dem PC ein
Server eingerichtet, welcher über Port 5550 und TCP/IP angesprochen werden
kann. Nun will ich an diesen Port Befehle senden. Zum Beipsiel: "2180 A1
<crt> <lf>". Wie realisiere ich dieses in C# (.Net). Ist die Klasse Socket
ein Ansatz?<<

Der Hinweis:



Testweise würde ich erst mal über einen Telnet Client auf diesen Port




gehen (z.B. auf der Kommandozeile "telnet localhost 5500" wenn der
Server lokal installiert ist). Wenn dann die Steuerbefehle per Tastatur
eingegeben werden können und richtig ankommen, ist ein einfacher in C#
geschriebener Telnet Client ein Weg.<<

funktioniert gut!

Jetzt geht es an die Umsetzung in C':

Der Versuch:

Socket s = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
s.Connect("localhost", 5550);
byte[] buffer = new byte[5] {33, 128, 161, 13, 10 }; // o.g.
Hex-Werte als Dezimal umgerechnet
int i = s.Send(buffer);

funktioniert leider nicht. Die Verbindung zum Server wird angezeigt, jedoch
keine Reaktion.

Was ist falsch?

Oder wàre es besser so?

TcpClient client = new TcpClient("localhost", 5550);
Byte[] data = new byte[5] {33, 128, 161, 13, 10 };
NetworkStream stream = client.GetStream();
// Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length);
// Close everything.
stream.Close();
client.Close();

Bei dem Telnet-Client von MS muss ich direkt Hex-Werte (21 80 A1) senden, C#
erfordert jedoch meines Wissens die dezimalen Entsprechungen (Byte-Array),
also umrechnen und die Werte 13 und 10 für <cr> und <lf> hinzufügen? Wie
dargestellt?

Ich weis ein langer Text, danke für weitere Hilfe!

Lars Müller
 

Lesen sie die antworten

#1 Michael Justin
08/11/2009 - 14:06 | Warnen spam
Lars Müller wrote:


kann. Nun will ich an diesen Port Befehle senden. Zum Beipsiel: "2180 A1
<crt> <lf>".


...
byte[] buffer = new byte[5] {33, 128, 161, 13, 10 }; // o.g.
Hex-Werte als Dezimal umgerechnet
int i = s.Send(buffer);

funktioniert leider nicht.



Die Dezimalwerte 33, 128, 161 passen irgendwie nicht zu "2180 A1".

Vermutlich müsste es 50, 49, 56, 48, 32, 65, 49 sein (je Zeichen ein
ASCII-Byte), zuzüglich 13, 10

Viele Grüße,
Michael Justin
SCJP, SCJA
betasoft - Software for Delphi™ and for the Java™ platform
http://www.mikejustin.com - http://www.betabeans.de

Ähnliche fragen