我有幾種不同的方法可以連接到遠程主機,發送消息,獲得答覆以及使用信息。這一直工作得很好,直到我在我的連接類的同一個實例中使用兩個方法。在我得到錯誤的例子中,我運行以下方法;當使用新創建的網絡流時,網絡流「無法訪問處置對象」
public string sendRequestAccountID(string siteID)
{
//build message
String response = String.Empty;
TcpClient client = new TcpClient();
client.Connect(detailsHere);
NetworkStream stream = client.GetStream();
StreamWriter writer = new StreamWriter(stream);
writer.AutoFlush = false;
writer.WriteLine(sb.ToString());
writer.Flush();
StreamReader reader = new StreamReader(stream);
List<XmlNode> nodeList = new List<XmlNode>();
byte[] responseBytes = new byte[4096];
int bytesRead = 0;
while (true)
{
bytesRead = stream.Read(responseBytes, 0, responseBytes.Length);
if (bytesRead > 0)
{
//handle message
}
if (bytesRead == 0)
{
stream.Flush();
stream.Close();
client.Close();
string finalResponse = stuffHereToSend;
return finalResponse;
}
}
}
這發送正常,並按預期返回消息。但是,如果我然後使用我的連接類的相同實例並使用以下方法;
public bool sendNewDevice(IDeviceInterface device)
{
NetworkStream stream;
sb = new StringBuilder();
//build message
String response = String.Empty;
TcpClient client = new TcpClient();
client.Connect(detailsHere);
stream = client.GetStream();
StreamWriter writer = new StreamWriter(stream);
writer.AutoFlush = false;
writer.WriteLine(sb.ToString());
writer.Flush();
StreamReader reader = new StreamReader(stream);
List<XmlNode> nodeList = new List<XmlNode>();
byte[] responseBytes = new byte[4096];
int bytesRead = 0;
while (true)
{
bytesRead = stream.Read(responseBytes, 0, responseBytes.Length);
if (bytesRead > 0)
{
//handle message
}
}
}
我收到一個錯誤,它顯示「無法訪問已處理的對象」;
bytesRead = stream.Read(responseBytes, 0, responseBytes.Length);
雖然我認爲我剛剛剛剛分配在最新的方法流。它試圖使用以前關閉的?有沒有辦法解決這個問題或者我失蹤的東西?
編輯:是不是與客戶處置不正確?這兩種方法在一秒鐘內運行,也許第二種方法在第一種方法關閉之前打開?
有一個已經從方法去除任何代碼?也許是放置'作家'或'讀者'的東西?當處理StreamWriter或StreamReader時,它會處理底層的流。 – 2012-07-31 12:18:36
不怕,我只在每種方法的末尾處理/關閉。我已經改變(true)到(stream.CanRead),這似乎讓它超越了這一點。我現在沒有收到服務器的迴應,所以這肯定是另一個問題。 – 2012-07-31 12:37:47