我将C#代码从使用NetworkStream迁移到SSLStream,但是在使用stream.DataAvailable的地方出现错误:
错误1'System.Net.Security.SslStream'
不包含以下定义
'DataAvailable',没有扩展名
方法'DataAvailable'接受
类型的第一个参数
'System.Net.Security.SslStream'可以
被发现(您是否缺少使用
指令还是汇编参考?)
现在我的本地MSDN副本不包含DataAvailable作为SslStream的成员,但是http://msdn.microsoft.com/en-us/library/dd170317.aspx说它确实具有成员DataAvailable。
这是我的代码的副本。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.IO;
namespace Node
{
public static class SSLCommunicator
{
static TcpClient client = null;
static SslStream stream = null;
static List<byte> networkStreamInput = new List<byte>();
public static void connect(string server, Int32 port)
{
try
{
client = new TcpClient(server, port);
stream = new SslStream(client.GetStream(),false);
...
...
...
public static List<DataBlock> getServerInput()
{
List<DataBlock> ret = new List<DataBlock>();
try
{
//check to see if stream is readable.
if (stream.CanRead)
{
//Check to see if there is data available.
if (stream.DataAvailable)
{
byte[] readBuffer = new byte[1024];
int numberOfBytesRead = 0;
//while data is available buffer the data.
do
{
numberOfBytesRead = stream.Read(readBuffer, 0, readBuffer.Length);
byte[] tmp = new byte[numberOfBytesRead];
Array.Copy(readBuffer, tmp, numberOfBytesRead);
networkStreamInput.AddRange(tmp);
} while (stream.DataAvailable);
...
另外,如果您有更好的方法将流的输出放入托管数组中(稍后在代码中将对其进行一些解析),我也很乐意提供帮助。我正在使用Visual Studio 2008
- 编辑
我刚刚意识到我链接到嵌入式SDK,这不是嵌入式系统,因此如何查看普通.net SDK中是否有数据?
最佳答案
您正在寻找的页面是.NET Micro Framework的页面。
根据this page for .Net 2.0和this page for .Net 3.5,SSLStream上没有DataAvailable属性。
编辑:您不能只调用Read()看看是否有东西回来吗?我认为这不会阻止。