我有一个继承自TcpListener的类,这个类仅仅调用Start()方法和BeginAcceptTcpClient()方法。有时会调用该方法,但端口未打开(netstat不显示端口打开)。TcpListener.Start()不打开端口
类看起来像这样
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模式和处置内部的ExtendedTcpListener.Stop被调用。
问题发生时,日志中不存在停止文本。
不。当“Extended Tcp Listener started ...”字符串被写入时,到达那里时不会执行锁定。 m_stopLock是主要用作启动和停止锁定的对象,以避免同时启动和停止。 – 2010-03-02 12:19:14
你是什么意思,“你可以看看调试器,看看是否调用阴影构造函数?”。基础构造函数总是被调用,因为我唯一的构造函数调用Mybase.New() – 2010-03-02 12:20:40
所以我明白:问题不在于某些代码没有得到执行(MyBase.BeginAcceptTcpClient(AddressOf Me.CompleteAcceptTcpClient,Me)),我认为 - 但是,尽管代码得到执行,但端口仍未打开。它是否正确? – Ando 2010-03-02 12:25:24