2015-09-04 71 views
2

我希望你能原諒我,如果這是顯而易見的;剛開始用C++/cli。我正在使用一些示例C#代碼來生成此代碼,但在傳統C++應用程序中使用cli模式,所以我在翻譯時遇到了麻煩。不容易在網上找到樣本。C++/CLI使用XmlWriter與TcpClient不寫

這是一段代碼。一個XDocument被傳入這個代碼。我通過寫入一個文件來檢查它,並且生成的xml文件看起來應該如此(與示例C#應用程序相同)。 tcpclient調用似乎工作,如果我更改地址,它會引發異常。我也看到在TCP Sniffer中建立的連接。

請求 - > WriteTo不起作用 - 嗅探器顯示沒有寫入數據,設備也沒有響應。

此外,XmlReader :: Create調用將所有東西鎖定。

很明顯,我在設置作者或流的方式上出了問題。

任何想法?

謝謝。

  TcpClient^socket = gcnew TcpClient(address,port); // connect to device 

      NetworkStream^stream; 
      stream = socket->GetStream(); // get stream. 

      XmlWriter ^writer = XmlWriter::Create(stream,xmlWrite); // Create writer 

      request->WriteTo(writer); // Write XDocument to stream. 

      XmlReader ^reader = XmlReader::Create(stream,xmlRead); 
+0

TcpClient連接上面的調用。正如我所指出的,TCP嗅探器程序顯示它已連接。 但我試過改變代碼,因爲我想也許你是在做某些事情,並創建了沒有地址,端口參數的套接字,然後使用套接字 - >連接(地址,端口)命令。 同樣的行爲。 我連接的這個設備具有非常特定的行爲,我非常肯定它會關閉流。我沒有在設備上得到任何迴應,事實上,TCP嗅探器沒有顯示WriteTo發送的數據。 – KokoCa

回答

0

我不知道這是很好的形式,或沒有,但我找到了答案,所以我會在萬一別人張貼在這裏有一個類似的問題:

後 請求 - >的writeTo(作家) 我加了 writer-> Flush()。

奇怪的是我從事C#工作的例子並不需要這個,所以如果任何人有任何的洞察到爲什麼差異,我很樂意聽到它。

+0

這並不奇怪;-)'XmlWriter'將緩衝寫入數據。調用'Flush'告訴它將緩衝區發送到流。我敢打賭,C#代碼將其封裝在一個'using'塊('Dispose'調用'Flush')中,可以將它轉換爲C++/CLI中的堆棧語義。 –