Я написал TcpClient и сервер, которые общаются через SslStream. Связь работает, но когда я отправляю сообщение от клиента на сервер, сначала сервер читает 1 байт, а на следующем шаге все остальное. Пример: я хочу отправить "test" через Клиент, а Сервер получает сначала "t", а потом "est"
Вот код, который клиент должен отправить
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) {
}
А вот код, который Сервер использует для чтения
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);
}
}
Я что-то пропустил? Спасибо за вашу помощь
tes
, а затемt
, илиt
, а затемest
илиte
, а затемst
. Это зависит от многих вещей, скорости, буферов на оборудовании (ваш компьютер, маршрутизаторы и коммутаторы между двумя конечными точками и т. д.) и программного обеспечения. Короче говоря, ваш код должен быть в состоянии справиться с этим. - person Lasse V. Karlsen   schedule 02.05.2016test
, а затемotherTest
, что, если ваше первое чтение даст вамtestoth
? Вам нужно создать что-то поверх потока для обработки вашего протокола и ваших пакетов. - person Lasse V. Karlsen   schedule 02.05.2016