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