c#SslStream.Read循环问题

c#SslStream.Read循环问题,c#,.net,networkstream,sslstream,C#,.net,Networkstream,Sslstream,我一直在通过创建一个应用程序来学习C#,但我遇到了一个我真的很难克服的障碍 基本上,我有下面的代码,这是我用来从我设置的网络流中读取的代码。它可以工作,但每次sslstream.Read()解锁时,它只读取1个数据包。这会导致大量信息积压 我想尝试做的是,如果流读取的部分包含多个数据包,则将它们全部读取 我已经尝试了很多次去解决这个问题,但最终我陷入了一大堆代码中 如果有人能帮忙,我将不胜感激 (每个数据包的前4个字节是数据包的大小。数据包的范围在8字节到28000字节之间) SslStream

我一直在通过创建一个应用程序来学习C#,但我遇到了一个我真的很难克服的障碍

基本上,我有下面的代码,这是我用来从我设置的网络流中读取的代码。它可以工作,但每次sslstream.Read()解锁时,它只读取1个数据包。这会导致大量信息积压

我想尝试做的是,如果流读取的部分包含多个数据包,则将它们全部读取

我已经尝试了很多次去解决这个问题,但最终我陷入了一大堆代码中

如果有人能帮忙,我将不胜感激

(每个数据包的前4个字节是数据包的大小。数据包的范围在8字节到28000字节之间)

SslStream _SslStream=(SslStream)_sslconnection;
int字节=-1;
int=0;
int bytesleeftoread=-1;
字节[]tmpMessage;
字节[]缓冲区=新字节[3000000];
做
{
字节=_sslStream.Read(缓冲区,nextread,8192);
int packetSize=BitConverter.ToInt32(缓冲区,0);
nextread+=字节;
byteslefttoread=包装尺寸-下一步;
if(bytesleeftoread 0);
Buffer.BlockCopy(Buffer,packetSize,Buffer,0,剩余);
byteslefttoread=0;
nextread=剩余的;
}
}while(字节!=0);

如果您使用的是.Net 3.5或更高版本,我强烈建议您研究一下。它将简单地描述您试图通过网络执行的任何操作

另一方面,如果你这样做纯粹是为了教育目的。 看一看。最好的办法是以较小的增量从流中读取数据,然后将该数据馈送到另一个流中。一旦确定了消息所需的数据长度,就可以将第二个流切割成消息。您可以在检查可用字节的位置设置外部循环,并等待其值>0后开始下一条消息。还要注意的是,任何网络代码都应该在自己的线程上运行,以免阻塞UI线程