2012-08-08 46 views
0

是否有一個簡單的(非迭代)方式來綁定兩個套接字,一個TCP和一個UDP,保證都有相同的臨時端口?保證臨時端口是相同的,當創建兩個套接字,一個TCP和一個UDP

我有一個簡單的服務器,最初通過TCP連接到,但也通過UDP傳輸。我不想從客戶端發送UDP數據包連接,只是爲了讓服務器發現客戶端的UDP臨時端口。除非必須,否則我不想通過初始TCP連接消息發送端口號。

現在,我在TCP套接字上的getsockname之後顯式綁定客戶端UDP套接字的端口,以發現OS分配的臨時端口。它還沒有失敗,但感覺很脆弱。

編輯: 澄清,目前執行假定操作系統絕不會分配一個臨時端口對於已經使用UDP套接字TCP套接字。

+0

你需要什麼端口?你想做什麼? – CodeCaster 2012-08-08 07:08:56

+0

沒關係。有很多方法可以在不發送數據的情況下通知服務器第二個短暫端口,但是如果我可以幫助它的話,我不想做任何一個。 – 2012-08-08 16:30:05

+0

這對我很重要,因爲我很好奇你想做什麼。爲什麼兩個臨時端口(即客戶端OS指定爲連接或數據流*的源端口的端口)必須相同?這樣做有什麼好處,以及操作系統分配的隨機端口有什麼問題? – CodeCaster 2012-08-08 16:59:47

回答

0

將一個綁定到(0),然後獲取本地端口值,然後將另一個綁定到該值。如果失敗(端口已分配),關閉第一個插座,沖洗並重復。

沒有其他方式,脆弱,因爲它可能'感覺'。但我不明白你爲什麼需要他們一樣。如果它們是短暫的,沒有人知道它們是什麼,你必須以某種方式爲它們做廣告。

+0

需求與我無關。我希望它們保持一致,這樣我就不必從客戶那裏發送另一條信息。不,如果我保證它與第一個相同,我不必宣傳第二個端口。 – 2012-08-08 16:54:05

+0

另外,雖然我很欣賞答案,但這是迭代的,我認爲你誤解了我對脆弱性的關注。我知道迭代方法是有效且非易碎的。 – 2012-08-08 19:38:22

+0

@CatZimmermann我不明白。 「迭代」有什麼問題嗎?正是這種解決方案在你的問題中被形容爲脆弱的。那裏沒有misconstrual。 – EJP 2012-08-09 00:19:39

相關問題