【问题标题】:Re-opening a closed NetworkStream?重新打开关闭的 NetworkStream?
【发布时间】:2009-08-11 17:30:03
【问题描述】:

早上好,

我需要一些建议,我正在使用从 TcpClient 流式传输的 networkStream,一切正常,但后来我需要其他地方的一些功能,这需要关闭流。一旦连接关闭,我似乎无法找到重新打开连接的方法。谁能在这里指出我正确的方向?

这是我基于的代码示例:(显然这不是它的工作原理,但我已尽可能简化它:-))

private void MyMainFunction()
  {
  ConnectToTcp();

  if(CheckConnection == true)
    {
    DoWorkWithTcp();
    }

  DisconnectFromTcp();

  ConnectViaOtherSource();
  DoOtherSourceWork();
  DisconnectOtherSource();

  ConnectToTcp(); //Excecption thrown, epic fail!
  }

private void ConnectToTcp()
  {
  myClient = new TcpClient(ip, port);
  myNetStream = myClient.GetStream();
  }

private void DisconnectFromTcp()
  {
  myNetStream.Close();
  myClient.Close();
  }

提前致谢,不胜感激。

编辑 - 更改了变量拼写名称!哎呀!

编辑 - 抱歉,刚刚意识到问题来自其他地方,感谢您确认此代码是正确的 :-) 帮助我从其他来源发现问题

【问题讨论】:

  • 尝试重新连接时抛出什么异常?
  • ObjectDisposedException,但我正在重新创建它们?
  • 你能创建一个简短但完整的程序来演示这个问题吗? IE。我们可以将其全部粘贴到控制台 Program.cs 文件中,编译并运行吗?

标签: c# sockets c#-2.0 tcpclient networkstream


【解决方案1】:

问题来了,为什么你必须关闭连接,你不能在 DoOtherSourceWork() 期间保持打开(休眠)吗?

除此之外,代码看起来还可以,创建一个新的 TcpClient 等,所以我认为这取决于另一方 - 当您关闭连接时,对等软件会做什么?

【讨论】:

    【解决方案2】:

    不确定,因为您没有粘贴整个内容,但是

    myClient = new TcpClient(ip, port); myNetStream = sockClient.GetStream();

    sockClient 不是 myClient 这是一个错字还是它实际上在代码中?如果是这种情况,您还需要重新创建 sockClient

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2014-09-25
      相关资源
      最近更新 更多