TCP ist strombasiertes Protokoll. Um diesen Stream in meine Nachrichten zu konvertieren, sende ich die Größe jeder Nachricht mit der Nachricht selbst. Auf Serverseite lese ich zuerst die ersten zwei Bytes der Nachricht, die die Größe haben. Dann erstelle ich ein Byte-Array, dessen Größe der Größe entspricht, die gerade gelesen wurde. Dann lese ich die Bytes in dieses Array. Aber aus irgendeinem Grund werden mehr Bytes gelesen als spezifiziert. Wie kann ich genau die gleiche Anzahl an Bytes lesen, die ich angegeben habe?Socket-Programmierung: Wie kann ich eine bestimmte Anzahl von Bytes aus dem Puffer lesen?
Hier ist mein Code:
while (true)
{
data = null;
length = null;
size = new byte[2];
handler.Receive(size);
length += Encoding.ASCII.GetString(size, 0, 2);
System.Console.WriteLine("Size: " + Int32.Parse(length));
bufferSize = Int32.Parse(length) + 2;
bytes = new byte[bufferSize];
handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0, bufferSize);
System.Console.WriteLine("Data: " + data);
}
Dies ist mein Server in Windows-PC ausgeführt wird, in C# geschrieben. Mein Client läuft in Android-Handy, in Java geschrieben.
a) warum Sie verwenden '' Länge + = ... ' 'anstelle von' 'length = ...' '? b) Warum die '' + 2'' in '' bufferSize = Int32.Parse (length) + 2; ''? c) Sie erwarten, dass die Länge 2 ASCII-Zeichen beträgt. Schickt der Client sie als 2 Bytes? Oder vielleicht eine 4-Byte-Ganzzahl? – f1sh
a) Ich nehme an, dass 'length + = ...' dasselbe wie 'length = ...' ist, da die length jedes Mal auf null gesetzt wird. b) Es handelt sich um Newline-Zeichen, die vom Client gesendet werden. –
'Länge' muss' int' nicht 'string' sein. Vielleicht kommst du von 'python' oder' javascript' Welten. – i486