2015-09-04 37 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中的堆栈语义。 –