Simple chat program
Contents
基本功能
C++ 资源
自带:主机内通信。
|
|
server 固定公网 IP
阿里云: CentOS 7
server IP: 47.94.157.136
開放端口
|
|
server:
|
|
client:
|
|
come out:
|
|
ping 可以連接
端口掃不到
是因为阿里云外面又套了一層牆,而之前 vultr 就不存在这个问题。
不得不感慨,墙国真是从里到外都是墙啊!
端口放行
reboot
if you do not listen 9999 port on server, you will get Connection refused as well.
run on server
|
|
重新扫描,and Connection success.
阿里云在外面建了一个墙,把里面的墙禁掉,看来是为了符合国人的使用习惯啊:图形化界面设置端口。
implement
传输文件
函数说明
socket 类型
阻塞型:立即返回,更高效。 非阻塞型:轮询方式。
NAT 穿越 and P2P
NAT 不允许外网主机主动访问内网主机,破坏了端到端的网络通信。
P2P 技术却要求通信双方都能主动发起访问。
解决方案: 特殊场景
基于 UDP 打洞。
单层 NAT
多层 NAT
选择解决方案
原则:典型,普遍,通用,简单
参考常见解决技术。
ALG:适应性不强。
中间件技术:需要网关、内部主机和应用程序都支持UPnP技术。
打洞技术:STUN,对中间服务器轻依赖,不支持对防火墙和对称NAT的穿越;ICE,非对称NAT环境下首选的NAT穿越解决方案。
Relay服务器中转技术:turn,对中间服务器强依赖,当数据量大时,服务器的并发和处理能力成为瓶颈。
选择方案 ICE 可以参考教程选择免费商品类,注册一个账号,在服务器上搭建。
但出于对这个专业的尊重,还是用 ICE 框架实现吧。
目标:用 ICE 框架实现文件的传输 \ communication
ICE 实现方案
|
|
经过