我有一個繼承自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