【发布时间】:2011-06-01 21:13:45
【问题描述】:
我一直在通过创建一个应用程序来学习 C#,但我遇到了一个让我非常苦恼的问题。
基本上我有下面的代码,这是我用来从我设置的网络流中读取的代码。它可以工作,但每次 sslstream.Read() 解除阻塞时它只读取 1 个数据包。这会导致大量邮件积压。
我想要尝试做的是,如果流读取的部分包含多个数据包,则将它们全部读取。
我已经尝试过多次来解决这个问题,但我最终陷入了一大堆代码中。
如果有人能帮忙,我将不胜感激!
(每个数据包的前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);
【问题讨论】:
标签: c# .net networkstream sslstream