Ich habe einen TcpClient und einen Server geschrieben, die über einen SslStream kommunizieren. Die Kommunikation funktioniert, aber wenn ich eine Nachricht vom Client an den Server sende, liest der Server zuerst 1 Byte, und im nächsten Schritt den Rest. Beispiel: Ich möchte über Client „test“ senden, und der Server empfängt ersten „t“, und dann „est“SslStream EndRead bekommt zuerst 1 Byte
Hier ist der Code für den Client
public void Send(string text) {
byte[] message = Encoding.UTF8.GetBytes(text);
SecureStream.BeginWrite(message, 0, message.Length, new AsyncCallback(WriteCallback), null);
}
private void WriteCallback(IAsyncResult AR) {
}
zu senden Und hier der Code der Server verwendet, um zu lesen
private SslStream CryptedStream = ...;
private byte[] buffer = new byte[1024];
public void BeginReadCallback(IAsyncResult AsyncCall) {
// initialize variables
int bytesRead = 0;
try {
// retrieve packet
bytesRead = CryptedStream.EndRead(AsyncCall);
// check if client has disconnected
if (bytesRead > 0) {
// copy buffer to a temporary one
var temporaryBuffer = buffer;
Array.Resize(ref temporaryBuffer, bytesRead);
string read = Encoding.ASCII.GetString(temporaryBuffer);
SetText(read);
// read more data
CryptedStream.BeginRead(buffer, 0, 1024, new AsyncCallback(BeginReadCallback), null);
// client is still connected, read data from buffer
//ProcessPacket(temporaryBuffer, temporaryBuffer.Length, helper);
} else {
// client disconnected, do everything to disconnect the client
//DisconnectClient(helper);
}
} catch (Exception e) {
// encountered an error, closing connection
// Program.log.Add(e.ToString(), Logger.LogLevel.Error);
// DisconnectClient(helper);
}
}
Habe ich etwas verpassen? Vielen Dank für Ihre Hilfe
Was ist die Frage hier? Eine * streaming connection * sendet in keinster Weise Pakete von Bytes, sie sendet einen Strom von Bytes, beim Lesen muss man darauf vorbereitet sein, kleinere Teile von dem zu bekommen, was * man * ein Paket betrachtet und dieses dann in ein kohärentes Paket zusammenfügt muss sein. –
Ich bin nicht vertraut mit Streams, also vergib mir meine Unerfahrenheit. Also könnte das bedeuten, dass, wenn der Server viel schneller ist, würde ich "t" "e" "s" "t" erhalten? –
Sie * könnten * das empfangen, oder Sie könnten 'tes' und dann' t' oder 't' und dann' est' oder 'te' und dann' st' erhalten. Es hängt von vielen Dingen ab, Geschwindigkeit, Puffer auf Hardware (Ihr Computer, Router und Switches zwischen den beiden Endpunkten, etc.) und Software. Kurz gesagt, Ihr Code muss in der Lage sein, damit umzugehen. –