狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

c# socket TCP P2P 要怎樣才能讓同一端口重新連接

admin
2017年4月12日 1:11 本文熱度 7055
最近在做相關的東西,我是這樣理解P2P的:A和B都向S通信,如果A要連接B,需要先創建一個SOCKET SA連接S的一個端口SS,S通過SS與SA的連接得到SA端口的外網地址AS,然后把這個外網地址AS傳給B,B也一樣通過S將SB的外網地址BS傳給A。A斷開與S的連接的SA,B也一樣斷開SB,然后A用SA去連接SB的外網地址BS,之后轉為listen模式等待B用SB連接AS。(可能有點亂。)

現在的問題是,如果我將這個新的SOCKET SA斷開后(使用
client_mid.Shutdown(SocketShutdown.Both);
client_mid.Disconnect(false);//改為TRUE 則需要用beginCounnect,但我想用Counnect,且延時過長
client_mid.Close();


怎樣才能再用這個Socket SA Counect B的外網地址BS?提示釋放對象無法調用,改TRUE提示用異步調用且不能為同一IPENDPIONT?
因為要做到NAT穿網,如果我重新定義這個端口(比如CLOSE()后),對應的NAT的外網地址會不會改變了(原來SA對應著外網地址為AS,執行關閉后重新套接字后會不會SA就沒有對應AS了?)?這樣就連接不上了??!
而且至今找不到方法來重新用這個socket SA來連接B的socket SB的外網地址BS??!
已解決,很簡單,c#提供了這樣一個功能SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);//端口復用!一個端口用兩個套接字,然后其中一個套接字和服務器連接,另一個則可以和另一個客戶端連接。因為都是同一端口,所以NAT映射的端口肯定一樣。然后由于套接字的counnect目標IPEndPIONT不一樣,所以不會沖突(大概,有待驗證。)

該文章在 2017/4/12 1:13:26 編輯過

全部評論1

admin
2017年4月12日 1:14
每次調用的對象是重新構造的還是同一個,要么試試每次都重新構造對象來連接。
追問
我想應該是同一個,不然NAT怎么記住同一個端口對應的外網端口。但問題是怎樣才能用同一個而不是重新構造一個去counnect另一個IPEndPiont。。。。好糾結??!
追答
socket的操作應該是新開了線程去執行的,所以建議你每次連接重新構造一個新的吧。
追問
如果重連就得不到正確的端口號了。比如我連接服務器,服務器確認出連接的客戶端A的外網地址為192.168.1.1:5432。我需要其它客戶端對A的外網地址進行連接以達到P2P的效果??墒侨绻倚聵嬙煲粋€,新構造的外網映射地址就絕對不會是這個192.168.1.1:5432。那其它客戶端怎么連啊。。。。。。。。。
追答
那我建議你使用 UdpClient 進行通信

該評論在 2017/4/12 1:14:49 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved