在VB.net DLL中访问TcpClient

时间:2016-10-30 09:59:15

标签: vb.net tcpclient

我正在编写SimTools的DLL,用于访问NoLimitsRollercoasterSimulator的遥测数据。在使用

加载DLL期间创建TcpClient
tcpClientNLS

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

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

  • 是否可以在子例程中创建新的TcpClient(例如 DLL-GameStop)并在另一个子例程中访问它(例如 DLL-Process_Telemetry)?
  • 我还可以在中创建一个新的TcpClient 每当我读取遥测数据时,DLL-Process_Telemetry子程序 从NoLimits Simulation开始,然后关闭TcpClient ({100}每秒)在同一个import {Directive,HostListener} from '@angular/core'; @Directive({ selector: '[blockNonNumber]' }) export class blockNonNumberDirective { @HostListener('keydown', ['$event']) onKeyDown(event: any) { let keyCode = [8, 9, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110]; if ( keyCode.indexOf(event.which) === -1) event.preventDefault(); } } 子程序中。但是我 猜猜这只消耗了大量的处理时间?
  • 有吗? 另一种关闭连接并重用TcpClient的方法?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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子程序中(100×每秒)之后立即关闭TcpClient时,我也可以在DLL-Process_Telemetry子程序中创建一个新的TcpClient。但我想这只会耗费大量的处理时间?

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

  

是否有另一种方法可以关闭连接并重用TcpClient?

您也可以在tcpClientNLS.Close()致电后立即重新验证它(如上所示)。