2014-09-01 64 views
3

我的應用程序打開NetworkStream和StreamWriter以將HL7消息發送到服務。 該服務接收到HL7消息並始終發回確認。我有以下問題:在發送HL7消息(工作,我測試它)後,我嘗試使用s StreamReader從服務接收確認,但這導致了一個參數異常「數據流不可讀」。我調試到我的代碼中,發現連接在StreamWriter的使用塊之後關閉,因此StreamReader沒有任何可讀的內容。NetworkStream的連接自動關閉

這裏是我的代碼:

public static void SendMessage(string message, string ip, int port) 
    { 
     string acknowledge; 

     try 
     { 
      using (TcpClient client = new TcpClient(ip, port)) 
      { 
       using (NetworkStream networkStream = client.GetStream()) 
       { 
        using (StreamWriter clientStreamWriter = new StreamWriter(networkStream)) 
        { 
         clientStreamWriter.Write(message); 
        } 

        using (StreamReader clientStreamReader = new StreamReader(networkStream)) 
        { 
         acknowledge = clientStreamReader.ReadToEnd(); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Connection Problems: " + ex.ToString()); 
     } 
    } 

我怎麼能阻止被關閉了連接,因爲我想要閱讀的客戶端接收的HL7的消息後,發回確認?

+1

可能重複http://stackoverflow.com/questions/2666888/is-there-any-way-to-close-a -streamwriter-without-closing-its-basestream) – 2014-09-01 11:09:29

+0

這有助於很多,謝謝! – 2014-09-01 11:35:42

回答

4

已解決: StreamWriter裏面的using塊也關閉了基本Stream。

解決方案: 告訴Streamwriter離開連接。

public StreamWriter(
    Stream stream, 
    Encoding encoding, 
    int bufferSize, 
    bool leaveOpen 
) 
的[有沒有什麼辦法來關閉一個StreamWriter而不關閉它BaseStream?](
+0

哇,非常感謝,這正是我的問題! – 2017-01-23 16:10:18

+1

很高興我的錯誤使其他人避免他們。 – 2017-01-25 15:43:35