我一直在通過創建一個應用程序來學習C#,並且我碰到了一個難題,我真的很掙扎。c#SslStream.Read循環問題
基本上我有下面的代碼是什麼即時通訊使用從我已經設置的網絡流中讀取。它的工作原理是每次只讀取1個數據包,sslstream.Read()解鎖。這導致了大量的消息積壓。
即時看到試圖做的是,如果流讀取的部分包含多個數據包讀取它們。
我已經嘗試了多次解決它,但我只是在一大堆代碼結束了。
如果有人可以幫忙,我會很感激!
(每個分組的第一4字節是數據包的大小..分組範圍的8個字節和28000個字節之間)
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);