【问题标题】:C#: XML request over TCP, connection reset by peerC#:通过 TCP 的 XML 请求,由对等方重置连接
【发布时间】:2018-08-06 02:07:52
【问题描述】:

我正在使用以下代码通过 TCP 向机器发送 XML 请求:

    static void sendDataRequest()
    {
        const int byteSize = 1024 * 1024;
        byte[] messageBytes = new byte[byteSize];

        TcpClient client = new TcpClient();
        client.Connect("192.168.1.51", 61007);

        XmlDataDocument XMLDoc = new XmlDataDocument();
        XMLDoc.Load("send.xml");
        messageBytes = System.Text.Encoding.Unicode.GetBytes(XMLDoc.OuterXml);

        NetworkStream stream = client.GetStream();
        stream.Write(messageBytes, 0, messageBytes.Length);

        messageBytes = new byte[byteSize];
        stream.Read(messageBytes, 0, messageBytes.Length);

        stream.Dispose();
        stream.Close();
    }

机器上的日志记录了 XML 请求到达并执行了必要的步骤。但是,当需要发回结果时,它会列出以下消息:

  • 传输端点未连接
  • 对等方重置连接

这里有什么问题?任何提示将不胜感激。

【问题讨论】:

  • 这是一种特别的语言吗?
  • C#,只是添加了一个标签并编辑了标题。谢谢
  • 看起来消息正在回显然后关闭。尝试注释掉 Dispose() 和 Close() 看看会发生什么。您使用的是什么类型的应用程序?如果它是控制台应用程序,它可能正在关闭。因此,另一个测试是将 Console.Readline() 放在方法的末尾以阻止应用程序关闭。

标签: c# xml tcp


【解决方案1】:

读取可能有问题。 Network Stream 的 Read 方法仅读取当前可用的内容,最多可读取指定的最大字节数。由于并非所有预期的字节都可用,也许它只是读取一些响应,然后在剩余数据从服务器发送之前关闭连接。 Read 方法的结果是实际读取的字节数。跟踪该值很重要。如果服务器关闭连接,读取的字节数将为0。

这是来自 Microsoft 文档的示例。

https://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.read(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

int numberOfBytesRead = 0;

      // Incoming message may be larger than the buffer size.
      do{
           numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);

           //Do stuff with byte data

      }
      while(myNetworkStream.DataAvailable);

【讨论】:

    猜你喜欢
    • 2019-01-23
    • 2017-02-04
    • 1970-01-01
    • 2021-09-22
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多