Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Bitmap per TCP von Sensor empfangen
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

Bitmap per TCP von Sensor empfangen

beantworten | zitieren | melden

Hallo zusammen

Ich habe mich nun bei euch registriert, da ich mit meinem Problem einfach nicht voran komme

Ich habe einen Objekterkennungssensor, der mir, nachdem ich es per Befehl angefordert habe, ein Bitmap sendet.
Da ich leider mit der Datenübertragung in C# sehr wenig Erfahrung habe, scheitere ich daran, das Bitmap einzulesen...

Das Protokoll des Sensors sieht folgendermaßen aus:

<Ticket><Inhalt>CR LF
_______________________________
<Inhalt> ist das Kommando an das Gerät oder die Antwort vom Gerät (z B Auswerteergebnis)
<Ticket> ist eine Zeichenkette mit 4 Ziffern 0-9, die als Dezimalzahl zu interpretieren sind. Eine Nachricht an das Gerät mit einem bestimmten
Ticket wird mit einer Nachricht vom Gerät mit dem gleichen Ticket
beantwortet Ticket 0000 ist reserviert für Nachrichten, die selbstständig vom Gerät gesendet werden

Alle Antworten vom Gerät werden mit einem CR- und einem LF-Zeichen
abgeschlossen

Der Befehl zum Übertragen des Bildes ist so aufgebaut:

Ich sende zum Gerät : 1234I? <- "1234" ist das Ticket und "I?" der Befehl zum Bild abfragen.

Als Antwort laut Beschreibung sollte kommen:
<ticket><länge><bilddaten>
______________________________
<länge>: Zeichenkette mit genau 9 Ziffern, die als Dezimalzahl interpretiert die
Länge der folgenden Bilddaten in Byte angibt.
Bilddatenformat gemäß Einstellung im Bedienprogramm.

Das Empfangen anderer Antworten vom Sensor habe ich schon hinbekommen, allerdings waren das nur kleine Textantworten mit sehr kurzer Länge.

Ich denke für euch Experten wird das sicher ein kleines Problem sein, aber ich verzweifle schon länger daran. Zudem bin ich bei der Thematik Datenübertragung sehr weit am Anfang.
Ich wäre über jeden Tipp oder Codeausschnitt dankbar, der mir bei diesem Problem helfen könnte.

Vielen Dank schonmal vorab
[email protected]
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von [email protected] am .
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

Hallo [email protected],

wegen "Das Empfangen anderer Antworten vom Sensor habe ich schon hinbekommen" nehme ich an, dass du mit der Kommunikation grundsätzlich kein Problem hast, sondern nur beim Bild hängst.

Hier schreibst du nur von Bilddaten, somit kann nicht gezielt geholfen werden da wir nicht wissen in welchem Format die Bilddaten ankommen.
Werden die Bilddaten als byte-Stream gesendet od. als base64-kodierter String?
Kannst du eine Beispielantwort anhängen, damit wir genau wissen wie das aufgebaut ist?

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Je nach länge der Daten wirst du mehrere Events bekommen.
Mit dem 1. Event enthältst du die Ticketnummer und die Bilddatenlänge, damit kennst du die Gesamtlänge der Daten.
Du must dann die Daten anhängen, bis du alle Daten empfangen hast.
Danach kannst du aus den Bilddaten das Bitmap erstellen.
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Hallo ihr zwei,

danke schonmal für eure Hilfe.

Also mein Anfänglicher, sicherlich abenteuerlicher code zum Empfangen der Antworten sah bis jetzt so aus:


string _Text = "";
TcpClient tcpc = new TcpClient();
tcpc.Connect("192.168.0.49", 50010);
stream = tcpc.GetStream();

stream.Write(StringToByteArray("0815" + sendbox.Text + "\r\n"), 0, StringToByteArray("0815" + sendbox.Text + "\r\n").Length);
while ((_Text += (char)stream.ReadByte()).Last() != 10)           
{

}
receivebox.Text = _Text;
tcpc.Close();

Das funktioniert soweit für die normalen Textantworten auch gut, nur eben beim Bild nicht. Zum Format selber kann ich leider auch nicht viel sagen, da ich da absoluter Anfänger bin.
Aber ich habe hier mal ein paar mitgeschnittene Infos.

Hier mal ein Paket einer Textantwort, die auch korrekt ankommt:
0000   30 85 a9 15 9e b9 00 02 01 21 41 61 08 00 45 00  0........!Aa..E.
0010   00 a0 44 c7 40 00 40 06 73 fa c0 a8 00 31 c0 a8  [email protected]@.s....1..
0020   00 15 c3 5a 06 96 1c 04 eb fc fb 2d 5c 06 50 18  ...Z.......-\.P.
0030   16 d0 79 81 00 00 30 38 31 35 49 46 4d 20 45 4c  ..y...0815IFM EL
0040   45 43 54 52 4f 4e 49 43 09 4f 32 44 32 32 30 41  ECTRONIC.O2D220A
0050   48 09 4e 65 77 20 73 65 6e 73 6f 72 09 4e 65 77  H.New sensor.New
0060   20 6c 6f 63 61 74 69 6f 6e 09 31 39 32 2e 31 36   location.192.16
0070   38 2e 30 2e 34 39 09 32 35 35 2e 32 35 35 2e 32  8.0.49.255.255.2
0080   35 35 2e 30 09 31 39 32 2e 31 36 38 2e 30 2e 32  55.0.192.168.0.2
0090   30 31 09 30 30 3a 30 32 3a 30 31 3a 32 31 3a 34  01.00:02:01:21:4
00a0   31 3a 36 31 09 30 09 30 38 30 38 30 0d 0a        1:61.0.08080..

Und nun hier einmal ein Paket vom Bild(erstes Paket):

0000   30 85 a9 15 9e b9 00 02 01 21 41 61 08 00 45 00  0........!Aa..E.
0010   05 dc 98 0f 40 00 40 06 1b 76 c0 a8 00 31 c0 a8  [email protected]@..v...1..
0020   00 15 c3 5a 06 dc 2c 1a 8e 84 01 11 c8 77 50 10  ...Z..,......wP.
0030   16 d0 6b c9 00 00 30 38 31 35 30 30 30 33 30 38  ..k...0815000308
0040   32 37 38 42 4d 36 b4 04 00 00 00 00 00 36 04 00  278BM6.......6..
0050   00 28 00 00 00 80 02 00 00 e0 01 00 00 01 00 08  .(..............
0060   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0070   00 00 01 00 00 00 00 00 00 00 00 00 00 01 01 01  ................
0080   01 02 02 02 02 03 03 03 03 04 04 04 04 05 05 05  ................
0090   05 06 06 06 06 07 07 07 07 08 08 08 08 09 09 09  ................
00a0   09 0a 0a 0a 0a 0b 0b 0b 0b 0c 0c 0c 0c 0d 0d 0d  ................
00b0   0d 0e 0e 0e 0e 0f 0f 0f 0f 10 10 10 10 11 11 11  ................
00c0   11 12 12 12 12 13 13 13 13 14 14 14 14 15 15 15  ................
00d0   15 16 16 16 16 17 17 17 17 18 18 18 18 19 19 19  ................
00e0   19 1a 1a 1a 1a 1b 1b 1b 1b 1c 1c 1c 1c 1d 1d 1d  ................
00f0   1d 1e 1e 1e 1e 1f 1f 1f 1f 20 20 20 20 21 21 21  .........    !!!
0100   21 22 22 22 22 23 23 23 23 24 24 24 24 25 25 25  !""""####$$$$%%%
0110   25 26 26 26 26 27 27 27 27 28 28 28 28 29 29 29  %&&&&''''(((()))
0120   29 2a 2a 2a 2a 2b 2b 2b 2b 2c 2c 2c 2c 2d 2d 2d  )****++++,,,,---
0130   2d 2e 2e 2e 2e 2f 2f 2f 2f 30 30 30 30 31 31 31  -....////0000111
0140   31 32 32 32 32 33 33 33 33 34 34 34 34 35 35 35  1222233334444555
0150   35 36 36 36 36 37 37 37 37 38 38 38 38 39 39 39  5666677778888999
0160   39 3a 3a 3a 3a 3b 3b 3b 3b 3c 3c 3c 3c 3d 3d 3d  9::::;;;;<<<≤==
0170   3d 3e 3e 3e 3e 3f 3f 3f 3f 40 40 40 40 41 41 41  =>>>>[email protected]@@@AAA
0180   41 42 42 42 42 43 43 43 43 44 44 44 44 45 45 45  ABBBBCCCCDDDDEEE
0190   45 46 46 46 46 47 47 47 47 48 48 48 48 49 49 49  EFFFFGGGGHHHHIII
01a0   49 4a 4a 4a 4a 4b 4b 4b 4b 4c 4c 4c 4c 4d 4d 4d  IJJJJKKKKLLLLMMM
01b0   4d 4e 4e 4e 4e 4f 4f 4f 4f 50 50 50 50 51 51 51  MNNNNOOOOPPPPQQQ
01c0   51 52 52 52 52 53 53 53 53 54 54 54 54 55 55 55  QRRRRSSSSTTTTUUU
01d0   55 56 56 56 56 57 57 57 57 58 58 58 58 59 59 59  UVVVVWWWWXXXXYYY
01e0   59 5a 5a 5a 5a 5b 5b 5b 5b 5c 5c 5c 5c 5d 5d 5d  YZZZZ[[[[\\\\]]]
01f0   5d 5e 5e 5e 5e 5f 5f 5f 5f 60 60 60 60 61 61 61  ]^^^^____````aaa
0200   61 62 62 62 62 63 63 63 63 64 64 64 64 65 65 65  abbbbccccddddeee
0210   65 66 66 66 66 67 67 67 67 68 68 68 68 69 69 69  effffgggghhhhiii
0220   69 6a 6a 6a 6a 6b 6b 6b 6b 6c 6c 6c 6c 6d 6d 6d  ijjjjkkkkllllmmm
0230   6d 6e 6e 6e 6e 6f 6f 6f 6f 70 70 70 70 71 71 71  mnnnnooooppppqqq
0240   71 72 72 72 72 73 73 73 73 74 74 74 74 75 75 75  qrrrrssssttttuuu
0250   75 76 76 76 76 77 77 77 77 78 78 78 78 79 79 79  uvvvvwwwwxxxxyyy
0260   79 7a 7a 7a 7a 7b 7b 7b 7b 7c 7c 7c 7c 7d 7d 7d  yzzzz{{{{||||}}}
0270   7d 7e 7e 7e 7e 7f 7f 7f 7f 80 80 80 80 81 81 81  }~~~~...........
0280   81 82 82 82 82 83 83 83 83 84 84 84 84 85 85 85  ................
0290   85 86 86 86 86 87 87 87 87 88 88 88 88 89 89 89  ................
02a0   89 8a 8a 8a 8a 8b 8b 8b 8b 8c 8c 8c 8c 8d 8d 8d  ................
02b0   8d 8e 8e 8e 8e 8f 8f 8f 8f 90 90 90 90 91 91 91  ................
02c0   91 92 92 92 92 93 93 93 93 94 94 94 94 95 95 95  ................
02d0   95 96 96 96 96 97 97 97 97 98 98 98 98 99 99 99  ................
02e0   99 9a 9a 9a 9a 9b 9b 9b 9b 9c 9c 9c 9c 9d 9d 9d  ................
02f0   9d 9e 9e 9e 9e 9f 9f 9f 9f a0 a0 a0 a0 a1 a1 a1  ................
0300   a1 a2 a2 a2 a2 a3 a3 a3 a3 a4 a4 a4 a4 a5 a5 a5  ................
0310   a5 a6 a6 a6 a6 a7 a7 a7 a7 a8 a8 a8 a8 a9 a9 a9  ................
0320   a9 aa aa aa aa ab ab ab ab ac ac ac ac ad ad ad  ................
0330   ad ae ae ae ae af af af af b0 b0 b0 b0 b1 b1 b1  ................
0340   b1 b2 b2 b2 b2 b3 b3 b3 b3 b4 b4 b4 b4 b5 b5 b5  ................
0350   b5 b6 b6 b6 b6 b7 b7 b7 b7 b8 b8 b8 b8 b9 b9 b9  ................
0360   b9 ba ba ba ba bb bb bb bb bc bc bc bc bd bd bd  ................
0370   bd be be be be bf bf bf bf c0 c0 c0 c0 c1 c1 c1  ................
0380   c1 c2 c2 c2 c2 c3 c3 c3 c3 c4 c4 c4 c4 c5 c5 c5  ................
0390   c5 c6 c6 c6 c6 c7 c7 c7 c7 c8 c8 c8 c8 c9 c9 c9  ................
03a0   c9 ca ca ca ca cb cb cb cb cc cc cc cc cd cd cd  ................
03b0   cd ce ce ce ce cf cf cf cf d0 d0 d0 d0 d1 d1 d1  ................
03c0   d1 d2 d2 d2 d2 d3 d3 d3 d3 d4 d4 d4 d4 d5 d5 d5  ................
03d0   d5 d6 d6 d6 d6 d7 d7 d7 d7 d8 d8 d8 d8 d9 d9 d9  ................
03e0   d9 da da da da db db db db dc dc dc dc dd dd dd  ................
03f0   dd de de de de df df df df e0 e0 e0 e0 e1 e1 e1  ................
0400   e1 e2 e2 e2 e2 e3 e3 e3 e3 e4 e4 e4 e4 e5 e5 e5  ................
0410   e5 e6 e6 e6 e6 e7 e7 e7 e7 e8 e8 e8 e8 e9 e9 e9  ................
0420   e9 ea ea ea ea eb eb eb eb ec ec ec ec ed ed ed  ................
0430   ed ee ee ee ee ef ef ef ef f0 f0 f0 f0 f1 f1 f1  ................
0440   f1 f2 f2 f2 f2 f3 f3 f3 f3 f4 f4 f4 f4 f5 f5 f5  ................
0450   f5 f6 f6 f6 f6 f7 f7 f7 f7 f8 f8 f8 f8 f9 f9 f9  ................
0460   f9 fa fa fa fa fb fb fb fb fc fc fc fc fd fd fd  ................
0470   fd fe fe fe fe ff ff ff ff 0d 0d 0e 0d 0f 0e 0d  ................
0480   0e 0e 0d 0d 0e 0d 0e 0d 0e 0f 0e 0e 0d 0d 0e 0e  ................
0490   0e 0e 0e 0d 0e 0f 0f 0f 11 0d 0f 0e 0d 0d 0e 0e  ................
04a0   0d 0e 0e 0d 0d 0d 0e 0f 0e 0f 0e 0d 0d 0e 0e 0f  ................
04b0   0e 0e 0d 10 0d 0d 0d 0d 0d 0d 0d 0e 0d 0d 0d 0e  ................
04c0   0d 0e 0d 0e 0d 0e 0e 0d 0e 0e 0d 0d 0e 0f 0e 11  ................
04d0   0e 0f 0e 11 0e 0e 0f 0e 10 0f 0d 0e 0e 0d 0e 0d  ................
04e0   0d 0d 0d 0e 10 0e 0d 0d 0e 0e 0e 0f 0d 0e 0d 0f  ................
04f0   0e 0f 0e 0d 0d 0e 0e 0e 0e 0e 0f 0e 0e 0e 0e 0d  ................
0500   0e 0e 0d 0e 0e 0d 0d 0d 0d 0e 0e 0e 0f 0f 0e 0d  ................
0510   0d 0d 0d 0d 0f 0d 0d 0d 0d 0d 0e 0e 0d 0f 0e 0e  ................
0520   0d 0f 0d 0d 0e 0e 0d 0d 0d 0d 0e 0d 0d 0f 0d 0d  ................
0530   0e 0d 0e 0d 0e 0d 0d 0e 0e 0d 0d 0e 0e 0e 0e 0e  ................
0540   0e 0f 0f 0e 0e 0e 0e 0f 0d 0e 0e 0f 0e 0f 0e 0e  ................
0550   0f 10 0e 11 0e 0e 0e 0f 0e 0f 0e 0d 0e 0e 0e 0e  ................
0560   0f 0e 0e 0f 0f 0e 10 0e 0e 0e 0e 0e 0d 0d 0d 0d  ................
0570   0e 0d 0e 0d 0d 0d 0e 0d 0d 0d 0d 0d 0d 0d 0e 0e  ................
0580   0d 0d 0d 0e 11 0f 0d 0d 0f 0e 0d 0d 0d 0e 0f 0e  ................
0590   0e 0e 0d 0f 0d 0d 0e 0e 0d 0d 0f 0e 0f 0d 0f 0e  ................
05a0   0e 0e 0d 0d 0d 0e 0e 0e 0e 0d 0e 0e 0d 0d 0d 0e  ................
05b0   0d 0d 0d 0e 0e 0f 0e 0e 0e 0d 0e 0e 0e 0e 0e 0e  ................
05c0   0d 0d 0e 0d 0d 0d 0d 0f 0d 0e 0d 0f 0f 0e 0d 0d  ................
05d0   0d 0d 0d 0e 0e 0d 0e 10 0e 0f 0e 0e 0e 0d 0d 0e  ................
05e0   0e 0e 0f 0d 0f 0e 0d 0d 0f 0e                    ..........
(Als Ticket wurde "0815" verwendet.)
Ich bin leider total überfordert damit, die Länge des Bitmaps auszulesen und alle Pakete zu empfangen, bis das Bild vollständig empfangen wurde.
Wenn ich es richtig sehe, sollte die Länge 000308278 Bytes sein?
Das Bildformat wurde im Sensor auf "Windows Bitmap" konfiguriert.

Gruß
[email protected]
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von [email protected] am .
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7559
Herkunft: Waidring

beantworten | zitieren | melden

Hallo [email protected],
Zitat
while ((_Text += (char)stream.ReadByte()).Last() != 10)
das ist suboptimal. Schau dir die StreamReader-Klasse an -> das ist der bevorzugte Weg um das zu erledigen.

Strings mit += zu verketten ist nicht gut, da immer ein neues Objekt erstellt wird. Besser wäre -- falls es keine Alternative gibt -- mit dem StringBuilder zu arbeiten.


Probier den Stream "abzuteilen", also die Position dorthin zu setzen wo du glaubst, dass die Bilddaten losgehen. Schau dir dazu die Methoden der Stream-Klasse an.
Dann kannst du per Image.FromStream-Methode das Bild laden.

Das ist zwar mehr Trial & Error als gezieltes Vorgehen, aber so solltest du es schaffen.
In der Protokoll-Beschreibung gibt es keine näheren Infos dazu?

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Also die Protokollbeschreibung würde ich als ausreichend sehen.
Es kommen die Daten 4 Bytes Ticketnummer, 9 Bytes Datenlänge + Bilddaten
Somit musst du insgesamt Datenlänge + 13 Bytes empfangen.

Ich hab dir mal einen alten Client von mir angehängt.


        private CommunicationClient ServerConnection = new CommunicationClient();
		

		   ServerConnection.ServerIP = deineServerIP;
            ServerConnection.Port = deinTcpPort;
            ServerConnection.ConnectEvent += new EventHandler(ServerConnection_ConnectEvent);
            ServerConnection.DisconnectEvent += new EventHandler(ServerConnection_DisconnectEvent);
            ServerConnection.NewMessageEvent += new CommunicationClient.mEventHandler(ServerConnection_NewMessageEvent);
            ServerConnection.NewLogEvent += new CommunicationClient.mLogEventHandler(ServerConnection_NewLogEvent);
            ServerConnection.StartClient();

Damit bekommst du die Bytes im Event übertragen

in dem Event kannst du dann die Nachricht prüfen z.B.


int ticketID;
int DataLenght;
 int.TryParse(Encoding.ASCII.GetString(message, 0, 4), out ticketD);
 int.TryParse(Encoding.ASCII.GetString(message, 4, 9), out DataLenght);

Wenn die Empfangenen Daten < der berechneten Datenlänge ist, die nächten Daten anhängen, wenn alle Daten da sind, die dann weiterverarbeiten.
Attachments
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Hallo MartinH,

dein Client scheint gut zu funktionieren und empfängt auch Daten.
Aber ich stehe noch auf dem Schlauch wie ich diese nun aneinander reihen und die Länge ermitteln kann.

Könntest du mir da eventuell eine Hilfestellung geben?
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Was hast du bis jetzt?
Zeig das doch mal.
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Hallo,

ich habe bis jetzt, wenn neue Daten empfangen werden zum Testen ob was empfangen wird, bis jetzt das:


int ticketID;
int DataLenght;
int.TryParse(Encoding.ASCII.GetString(message, 0, 4), out ticketID);
int.TryParse(Encoding.ASCII.GetString(message, 4, 9), out DataLenght);
listBox1.Items.Add(ByteArrayToString(message));

Nur ist mir noch nicht klar, wie ich die Daten in ein Array aneinander reihen kann.
Und ist es möglich mit der .Length Eigenschaft eines Arrays die "gefüllte" Länge zu ermitteln oder wird damit nur die maximale Länge ermittelt?
Ausserdem muss ich für die richtige Darstellung ja noch das Ticket und die Länge am Anfang entfernen, wie könnte ich das machen?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von [email protected] am .
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Du kannst doch einfach die Daten in eine List<byte> über .AddRange anhängen.
Bei erreichter Länge über .ToArray() das Byte-Array für das Bitmap erstellen.
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Hallo :)

nun scheint es zu funktionieren. Ich werde nun für alle Übertragungen an den Sensor deinen Client benutzen ;) UM zu unterscheiden, ob es sich um ein Bild oder eine andere Nachricht handelt, verwende ich ein anderes Ticket bei den Bildern.

Es sieht nun folgendermaßen aus:


private void RequestPictureFromSensor()
        {
            BMPList.Clear();
            ServerConnection.StartClient();
            ServerConnection.Send_Data(StringToByteArray("1111t\r\n"));
            WindowFunctions.WaitTime(100);
            ServerConnection.Send_Data(StringToByteArray("2222I?\r\n"));
        }

private void ServerConnection_NewMessageEvent(byte[] message)
        {
            if (ByteArrayToString(message).StartsWith("1111"))
            {
            }
            else if (ByteArrayToString(message).StartsWith("2222"))
            {
                int.TryParse(Encoding.ASCII.GetString(message, 0, 4), out ticketID);
                int.TryParse(Encoding.ASCII.GetString(message, 4, 9), out DataLenght);
                followingimagedata = true;
                BMPList.AddRange(message);
            }
            else
            {
                if (followingimagedata)
                {
                    BMPList.AddRange(message);

                    if (BMPList.Count ≥ DataLenght + 13)
                    {
                        followingimagedata = false;
                        ServerConnection.EndClient = true;
                        ProcessImageData();
                    } 
                }
            }
        }

private void ProcessImageData()
        {
            BMPList.RemoveRange(0, 13);
            byte[] bmparray = BMPList.ToArray();
            pictureBox1.Image = byteArrayToImage(bmparray);
        }
Somit kann ich auch noch andere Nachrichten abfragen und verarbeiten, je nach Art der Nachricht mit anderer Ticketnummer.

Vielen Dank euch zwei für eure Hilfe :)

Edit: Eine Frage noch: Kann man bei deinem Client irgendwie abfragen, ob die Verbindung aktuell aktiv ist. Und gibt es eine Funktion zum Trennen der Verbindung?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von [email protected] am .
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Verbindung trennen must du dir noch selbst einbauen.

Du bekommst ja den Connect und Disconnect Event, damit kennst du den Verbindungszustand. Das Problem sind Verbindungsabbrüche wenn der Server (dein Sensor) z.B. ausgesteckt wird. Dann bekommst du das erst mit dem nächsten Senden von Daten mit.
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 6

Themenstarter:

beantworten | zitieren | melden

Mir scheint es leider so, als würde nach dem Verbinden das Disconnect Ereignis aufgerufen werden, obwohl die Verbindung erfolgreich hergestellt wurde.
Sieht in meinem Log so aus:

[16.10.2016 12:13:35] Sensoreinstellungen übernommen!
[16.10.2016 12:13:35] Anwendung gestartet...
[16.10.2016 12:13:45] Sensoreinstellungen übernommen!
[16.10.2016 12:13:45] : Connected to Server...
[16.10.2016 12:13:45] Verbindung getrennt!
[16.10.2016 12:13:59] Sensoreinstellungen übernommen!
[16.10.2016 12:13:59] Socket: Client 192.168.0.49:50010, disconnected
[16.10.2016 12:13:59] : Connected to Server...
[16.10.2016 12:13:59] Verbindung getrennt!
[16.10.2016 12:13:59] Socket: Unusual error druing Recieve! Auf das verworfene Objekt kann nicht zugegriffen werden. Objektname: "System.Net.Sockets.Socket".
[16.10.2016 12:13:59] Verbindung hergestellt!

Wie würdest du das mit dem Disconnect realisieren?
Ich dachte da schon an deine RestartServer Methode, diese könnte man doch anpassen auf Disconnect?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von [email protected] am .
private Nachricht | Beiträge des Benutzers
MartinH
myCSharp.de - Member

Avatar #avatar-1761.gif


Dabei seit:
Beiträge: 183
Herkunft: Asperg

beantworten | zitieren | melden

Da machst du noch was falsch.
Poste doch mal deinen Code.

- Client erstellen
- IP-Adresse und Port einstellen
- starten

der Client verbindet sich mit dem Server, bei einem Disconnect wird versucht
den Server wieder zu erreichen.

Nach dem Connect-Event kannst du die Daten senden.

Für den Disconnect (wenn nötig) erweiter doch einfach den Client mit einem Disconnect. Das Socket-Objekt hat doch die Methode Disconnect.
private Nachricht | Beiträge des Benutzers