【发布时间】:2010-03-02 10:35:45
【问题描述】:
我有一个继承自 TcpListener 的类,这个类隐藏 Start 方法只是为了调用基础 Start() 和基础 BeginAcceptTcpClient()。有时会调用该方法但端口未打开(netstat 未显示端口打开)。
类是这样的
Public Class ExtendedTcpListener
Inherits System.Net.Sockets.TcpListener
Public Shadows Sub Start()
SyncLock (m_stopLock)
MyBase.Start()
MyBase.BeginAcceptTcpClient(AddressOf Me.CompleteAcceptTcpClient, Me)
My.Application.Log.WriteEntry("Extended Tcp Listener started ...", TraceEventType.Verbose)
End SyncLock
End Sub
对正在发生的事情或如何调试问题有任何想法吗?由于无一例外地调用了 Start(),我希望找到始终打开的端口(始终写入日志)。
额外信息:当 Start 方法工作正常时,它每次都工作,直到重新启动应用程序。当 Start 方法不起作用时,它在重新启动应用程序之前不会再次起作用。
编辑:ExtendedTcpListener 处还有一个 Stop 方法:
Public Shadows Sub [Stop]()
SyncLock (m_stopLock)
MyBase.Stop()
My.Application.Log.WriteEntry("... extended Tcp Listener stopped", TraceEventType.Verbose)
End SyncLock
End Sub
使用 ExtendedTcpListener 的类实现 IDisposable 模式,并在 Dispose 内部调用 ExtendedTcpListener.Stop。
当问题发生时,停止文本不会出现在日志中。
【问题讨论】:
标签: .net vb.net network-programming tcplistener