編程語言:C/C++
主要使用:SOCKET套接字
編程軟件:VS2015
技術實現:P2P TCP打洞 內網穿透實驗
源碼:http://download.csdn.net/download/aaron133/10231687
【1】服務器S:
1、監聽等待主機A和主機B連接.
2、服務器S將主機A和主機B對方的公網IP地址以及端口號告知對方(內網IP地址也可以包含,因爲可能主機在同一個NAT後面).
3、關閉連接
【2】主機A:
1、創建套接字1.
2、設置套接字1爲SO_REUSEADDR重用標記.
3、將套接字1綁定到一個指定端口號,例如8888.
4、連接服務器S
5、等待服務器發送主機B的公網IP地址以及端口號
6、得到主機B的公網IP地址以及端口號之後,新建另外一個套接字2.
7、設置套接字2爲SO_REUSEADDR重用標記
8、將套接字2綁定到一個8888端口(第3步的端口號).
9、循環connect連接主機B.
【3】主機B:
與主機A的步驟完全一樣,當2個人同時發起connect時,connect返回0,這個套接字就是你們建立的鏈接.(不需要listen和accept)
【注意】
1、NAT類型不同,導致一些方法可能不管用,網上的很多一方connect(被NAT直接丟棄),對於我的NAT不管用.
2、還有一種先connect在對方NAT留下記錄,然後在讓對方connect,我方accept也不管用.