c# socket TCP P2P 要怎樣才能讓同一端口重新連接
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
最近在做相關(guān)的東西,我是這樣理解P2P的:A和B都向S通信,如果A要連接B,需要先創(chuàng)建一個SOCKET SA連接S的一個端口SS,S通過SS與SA的連接得到SA端口的外網(wǎng)地址AS,然后把這個外網(wǎng)地址AS傳給B,B也一樣通過S將SB的外網(wǎng)地址BS傳給A。A斷開與S的連接的SA,B也一樣斷開SB,然后A用SA去連接SB的外網(wǎng)地址BS,之后轉(zhuǎn)為listen模式等待B用SB連接AS。(可能有點亂。) 現(xiàn)在的問題是,如果我將這個新的SOCKET SA斷開后(使用 client_mid.Shutdown(SocketShutdown.Both); client_mid.Disconnect(false);//改為TRUE 則需要用beginCounnect,但我想用Counnect,且延時過長 client_mid.Close(); ) 怎樣才能再用這個Socket SA Counect B的外網(wǎng)地址BS?提示釋放對象無法調(diào)用,改TRUE提示用異步調(diào)用且不能為同一IPENDPIONT? 因為要做到NAT穿網(wǎng),如果我重新定義這個端口(比如CLOSE()后),對應(yīng)的NAT的外網(wǎng)地址會不會改變了(原來SA對應(yīng)著外網(wǎng)地址為AS,執(zhí)行關(guān)閉后重新套接字后會不會SA就沒有對應(yīng)AS了?)?這樣就連接不上了??! 而且至今找不到方法來重新用這個socket SA來連接B的socket SB的外網(wǎng)地址BS!! 已解決,很簡單,c#提供了這樣一個功能SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);//端口復用!一個端口用兩個套接字,然后其中一個套接字和服務(wù)器連接,另一個則可以和另一個客戶端連接。因為都是同一端口,所以NAT映射的端口肯定一樣。然后由于套接字的counnect目標IPEndPIONT不一樣,所以不會沖突(大概,有待驗證。) 該文章在 2017/4/12 1:13:26 編輯過
|
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |