2010-08-06 45 views
3

我需要創建一個大腦死亡的HTTP服務器,它返回本地主機上所有內容的404。具體來說,我有一個在驗收測試工具下的程序,該程序調用服務器,但爲了測試,我希望通過跳過不相關的檢查來節省時間。如何找到未使用的端口?

我有辦法在程序使用測試工具的一部分,URL通過,測試工具(目前)只是創建端口這樣的服務器80

但是,如果出現更多問題而不是一次測試嘗試同時運行,因爲每個測試工具都試圖在端口80上創建一個HTTP服務器,這對於其中一個線束來說是失敗的。

因此,我想在嘗試創建HTTP服務器之前隨機化端口並確保它可用。我如何檢查該端口是否在使用中?

回答

1

我以爲答案是顯而易見的:如果套接字偵聽失敗,它不可用:選擇另一個。只聽例外。

0

爲什麼不完全嘲笑這個請求,以至於根本不需要服務器或網絡連接?

這將使一個更脆弱的測試。

好吧,無論如何,你能不能在一些預定義的範圍內生成一個隨機端口,並嘗試在其上設置一個服務器?如果它已經被佔用,應該拋出異常。

+0

這是一個驗收測試。測試根本無法訪問被測應用程序的內部。它使用命令行參數運行測試中的應用程序並檢查結果。這不是一個真正的脆弱問題,因爲被測試的應用程序並不關心來自服務器的響應 - 它只是*發送*數據。並將其發送到真正的遠程服務器,每次測試增加5s +時間,當有數百個時間時,這是令人討厭的。 – 2010-08-06 16:59:55

11

綁定一個插座端口0,系統將挑選一個可用的端口,1024和5000之間,我相信

以後,您可以學會與Socket.LocalEndPoint屬性,分配的端口。

+0

我不知道,從來沒有需要它,但真的很好知道:) +1 – leppie 2010-08-06 17:04:41

+0

現在,如果只有我使用的HTTP庫暴露了實際的套接字.... – 2010-08-06 17:07:05

+1

+1 - 這可能是最好的答案,但不幸的是我使用的HTTP庫是垃圾,並沒有公開套接字供我檢查。 – 2010-08-06 17:17:36