Entwickler-Ecke
Netzwerk - TCP/IP - Daten senden
GURKE deluxe - So 26.05.13 00:08
Titel: TCP/IP - Daten senden
Hallo,
Ich habe mir ein AVR-NET-IO-Board gekauft. Dieses ist über LAN ansteuerbar. Dazu benutzt es TCP/IP.
Nun will ich ein Programm schreiben, dass dieses Board anschreibt. Um es zu steuern reichen einfache Befehle wie: "getadc 1". Ich habe keine Ahnung, wie sich das realisieren lässt und meine bisherige Internet-Recherche hat mich nur zu sehr großen relativ komplexen Programmen geführt.
Ich habe leider auch kein richtigen Ansatz, was ich in etwa machen soll, auf dem ich aufbauen könnte. Gibt es nicht eine einfache Möglichkeit, solch ein Befehl an das Board zu schicken und die Antwort als string direkt wieder abzuspeichern?
Schöne Grüße
Julian
GURKE deluxe - So 26.05.13 01:11
Ich habe jetzt bereits folgendes:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private static byte[] toASCIIArray(string s) { byte[] result = new byte[s.Length]; for (int i = 0; i < s.Length; i++) { if (s[i] <= 0xFF) result[i] = (byte)s[i]; } return result; }
private static void write(Stream stream, string s) { byte[] bytes = toASCIIArray(s); stream.Write(bytes, 0, bytes.Length); }
private void bKomandoSenden_Click(object sender, EventArgs e) { TcpClient c = new TcpClient("192.168.178.77", 50290); write(c.GetStream(), tbKomando.Text + "\r\n"); NetworkStream s = c.GetStream(); s.ReadTimeout = 1000; string Text = ""; while ((Text += (char)s.ReadByte()).Last() != 13); MessageBox.Show(Text); c.Close(); } |
Das funktioniert soweit auch. Das Problem ist, wenn die Rückgabe mehr als eine Zeile hat, dann wird der Rest einfach weggelassen. Gibt es da eine gute Möglichkeit, herauszufinden, wann das Ende kommt?
jfheins - So 26.05.13 09:46
GURKE deluxe hat folgendes geschrieben : |
Das Problem ist, wenn die Rückgabe mehr als eine Zeile hat, dann wird der Rest einfach weggelassen. |
Ja, kein Wunder. Hier liest du ja nur genau so lange ein, bis ein Zeilenumbruch (13) kommt:
C#-Quelltext
1:
| while ((Text += (char)s.ReadByte()).Last() != 13); |
Du musst dir da jetzt etwas überlegen. Ein Ansatz wäre: "Sobald ich 100ms nichts mehr empfangen habe, ist die Nachricht bestimmt zu Ende", da musst du dann schauen wann das read() mit dem Timeout zurückkommt. Ganz nett sind natürlich Trennzeichen, die Nahrichten trennen, und sonst nicht vorkommen. Ich weiß jetzt nicht wie viel Einfluss du auf die Gegenseite hast.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!