【问题标题】:Accessing TcpClient in VB.net DLL在 VB.net DLL 中访问 TcpClient
【发布时间】:2016-10-30 18:31:43
【问题描述】:

我正在为SimTools 编写一个访问NoLimitsRollercoasterSimulator 遥测数据的DLL。 TcpClient 是在加载 DLL 时创建的

Dim tcpClientNLS As New TcpClient()

然后,DLL 中的所有不同子例程都可以访问tcpClientNLS。当我在其中一个子例程(例如Public Sub GameStart())中创建 TcpClient 时,客户端只能在此子例程(GameStart)中访问。问题是当 NoLimits 模拟结束时,DLL-subsoutine GameStop 必须关闭 TcpClient,否则 NoLimits 模拟会挂起。

因为tcpClientNLS.Close() 调用不仅关闭了连接而且还释放了tcpClient,所以它不再可以访问了。 因此,下次 NoLimits 模拟开始并且DLL-GameStart 例程尝试将 TcpClient 与tcpClientNLS.Connect("127.0.0.1", 15151) 连接时,它会引发异常。 我尝试了几种不同的选择 - 到目前为止都没有运气。

  • 是否可以在子例程中创建新的 TcpClient(例如 DLL-GameStart) 并在另一个子程序中访问它(例如 DLL-GameStop)?
  • 我也可以在 DLL-Process_Telemetry 每次读取遥测数据时的子程序 从 NoLimits Simulation 并在之后立即关闭 TcpClient (每秒 100 次)在同一 DLL-Process_Telemetry 子例程中。但是我 你猜这只是消耗大量的处理时间?
  • 有吗 另一种关闭连接并重用 TcpClient 的方法?

提前感谢您的帮助!

【问题讨论】:

    标签: vb.net tcpclient


    【解决方案1】:

    是否可以在一个子程序(例如 DLL-GameStart)中创建一个新的 TcpClient 并在另一个子程序(例如 DLL-GameStop)中访问它?

    不可能在方法/子例程中创建新变量然后从外部访问它,

    但是您可以随时重新实例化您的全局 tcpClientNLS 变量,例如在您的 GameStart() 方法中:

    Dim tcpClientNLS As TcpClient
    
    Public Sub GameStart()
        tcpClientNLS = New TcpClient()
        tcpClientNLS.Connect("127.0.0.1", 15151)
        ...
    End Sub
    

    我还可以在每次从 NoLimits Simulation 读取遥测数据时在 DLL-Process_Telemetry 子例程中创建一个新的 TcpClient,并在同一个 DLL-Process_Telemetry 子例程中(每秒 100 次)之后立即关闭 TcpClient。但我猜这只是消耗大量的处理时间?

    这样做可能会减慢速度,是的。

    还有其他方法可以关闭连接并重用 TcpClient 吗?

    您也可以在tcpClientNLS.Close() 调用之后立即重新实例化它(如上所示)。

    【讨论】:

    • 非常感谢@Visual Vincent 的编辑和快速回答。现在工作正常 :) 有像你这样的支持者和 stackoverflow 社区真是太好了!!!
    • @value1 :没问题,很高兴我能帮上忙!祝你的项目好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多