Я изучал C #, создав приложение, и столкнулся с трудностями, с которыми я действительно борюсь.
В основном у меня есть код ниже, который я использую для чтения из сетевого потока, который я настроил. Это работает, но только как чтение 1 пакета каждый раз, когда sslstream.Read () разблокируется. Это вызывает большое отставание сообщений.
Что я пытаюсь сделать, так это то, что часть прочитанного потока содержит несколько пакетов, прочитавших их все.
Я пытался разобраться несколько раз, но я просто оказался в большом беспорядке кода.
Если бы кто-нибудь мог помочь, я был бы благодарен!
(первые 4 байта каждого пакета - это размер пакета. Диапазон пакетов составляет от 8 до 28 000 байтов)
SslStream _sslStream = (SslStream)_sslconnection;
int bytes = -1;
int nextread = 0;
int byteslefttoread = -1;
byte[] tmpMessage;
byte[] buffer = new byte[3000000];
do
{
bytes = _sslStream.Read(buffer, nextread, 8192);
int packetSize = BitConverter.ToInt32(buffer, 0);
nextread += bytes;
byteslefttoread = packetSize - nextread;
if (byteslefttoread <= 0)
{
int leftover = Math.Abs(byteslefttoread);
do
{
tmpMessage = new byte[packetSize];
Buffer.BlockCopy(buffer, 0, tmpMessage, 0, packetSize);
PacketHolder tmpPacketHolder = new PacketHolder(tmpMessage, "in");
lock (StaticMessageBuffers.MsglockerIn)
{
//puts message into the message queue.. not very oop... :S
MessageInQueue.Enqueue(tmpPacketHolder);
}
}
while (leftover > 0);
Buffer.BlockCopy(buffer, packetSize , buffer, 0, leftover);
byteslefttoread = 0;
nextread = leftover;
}
} while (bytes != 0);