如何将socket服务器部署到云服务器上

14次阅读

前面有篇文章 建议大家利用云服务器实现外网通信 , 发现有挺多刚接触 socket 的同学买了云服务器后 , 不知道如何设置 , 将本地服务器代码移到云服务器上后 本地客户端一直连接不上 , 这里写下阿里云服务器的安全组设置(其他云服务器大同小异 对照下应该就可以设置好了), 以及代码的注意事项。

先来说下云服务器的设置 :

一、进入安全组设置页面 , 找到服务器实例 , 然后点击进入服务器实例详情页面 , 如果页面展示有安全组 , 直接点击进入设置页面 , 否则 选选择安全组选项

如何将socket服务器部署到云服务器上插图如何将socket服务器部署到云服务器上插图1

如何将socket服务器部署到云服务器上插图2

二、进入安全组设置页面后 , 会看到 访问规则 会有入方向和出方向两个设置 , 不同的云服务器 可能名字有点差别 但都是一样的

如何将socket服务器部署到云服务器上插图3

入方向 就是其他地址访问本服务器地址的访问限制 , 初始的云服务器可能只开放了 80 22 等常用端口 其他端口都未开放 所以导致无法连接 , 下面我们添加一条入规则 :

点击手动添加 :

如何将socket服务器部署到云服务器上插图4

授权策略 : 允许

优先级 : 可以随意设置范围内数字就好 , 默认设置 1 最高优先级

如何将socket服务器部署到云服务器上插图5

协议类型 : 不同云服务器可能有不一样的选项 , 阿里云可以选择【自定义 TCP】或者【全部】, 大家可以试试自己的【自定义 TCP】应该就可以了 , 连接不了的话 就设置【全部】就好了 这里是阿里云只有【全部】这个选项 , 像华为云有【全部 TCP】和【全部放通】, 建议选择【全部 TCP】

如何将socket服务器部署到云服务器上插图6

然后就是端口设置 , 一般建议设置的端口数大一些 , 因为较小的端口号一般有固定的协议或者系统使用了 , 端口是设置范围的 , 起始端口和结束端口如果是同一个端口号 , 则只设置一个端口号开放 , 阿里云这里可以设置 8888/8888, 表示只有 8888 开放 , 也可以设置 -1/- 1 表示全部开放(其他云服务可能不是 -1/-1, 可能是 1 /65535, 或者其他), 也可以选择列表中的【全部】,

如何将socket服务器部署到云服务器上插图7

授权对象 : 也可能是其他名字如: 目的地址、IP 地址等等 , 这个选项就是设置本服务器中 刚才设置的开放端口号 对应在哪个 IP 地址上开放 , 如果云服务器有两个 IP 可用 , 比如前设置了 8888 端口 这里设置其中一个固定 IP 时 , 就只有连接该 IP 的对应开放端口 8888 才能连上 , 连接其他 IP 的时端口 8888 也是连不上的 , 这里一般设置 0.0.0.0/0,0.0.0.0 表示接受开放所有 IP 的 8888 端口(刚才设置的端口范围)

如何将socket服务器部署到云服务器上插图8

描述 : 可以不写 也可自己根据开放的端口的用途写上备注 方便后续查看

三、点击保存 , 安全组的入规则就添加好了 , 然后服务器代码的端口设置 , 上面开放的端口范围内的端口号就可以了 , 出方向规则一般默认是全部放行的 , 如果没有 也可参照入方向 自己设置下 , 一样的流程。

如何将socket服务器部署到云服务器上插图9

然后是代码方面的注意事项 :

一般刚开始在本地的时候 , 服务器 IP 地址 bind 的是 127.0.0.1 回环地址 或者 192.168.1.233 内网 ip 对吧 , 这样子设置在本地机器通信的时候 是正常的 , 但是在公网上也就是云服务器上是不能被外界访问的 , 具体原因如下 :

127.0.0.1(localhost): 该地址是回环地址 , 是操作系统初始化本机的协议栈时 协议栈本身的 IP 地址 , 通过该地址传输的数据 , 不会发送到网卡上通过路由器传输 , 只是转发到本机的 IP 层处理 , 可以理解为只能在本机上使用 , 只能本机上的 客户端和服务器建立连接 , 其他的机器 无论是否是同一个局域网下的机子 , 因为 127.0.0.1 不经过网卡处理 , 所以都无法连接

192.168.1.233: 像这种 192.168.. 开头的本机 IP 地址 , 是和物理网卡进行绑定的 IP 地址 , 通过该地址传输的数据 会经过网卡处理 , 根据需要发送到路由器等设备 , 将数据传输到目标地址 , 但要注意的是该地址是局域网地址 , 只能连接同一局域网范围下的机子 , 无法连接外网 也就是公网 IP 通信 , 大家刚写 socket 代码的时候 服务器一般都是设置的本机 IP 所以本地和局域网通信都正常 , 但是在外网 (公网) 是无法连接的

39.108.220.10: 公网 IP 可以理解为除开像 IP 127.0……、192.168…. 这样开头的 IP 地址 , 比如 ping www.baidu.com, 就会显示百度域名对应的公网 IP, 公网 IP 就是可以外网通信的 IP 地址 , 设置该地址就可以 本地机子与外网机子之间建立连接 , 本机客户端和云服务就应该设置公网 IP 建立连接

如何将socket服务器部署到云服务器上插图10

注意事项 : 我们在服务代码 bind 的时候 如果本机有多张网卡也就是有多个 IP 地址可用 , 那么设置绑定固定的其中一个 IP 地址时 , 客户端意图连接本机的 TCP 时都只能通过该设置的 IP 连接 , 如果连接另一个 IP, 则会无法连接 , 如果设置 INADDR_ANY(0.0.0.0) 则全部可连接 , 所以应该按需设置

大家如果云服务器上安全组规则设置好了 , 本地客户端还是连接不上云服务器则可能是服务器代码绑定的 IP 不对。

所以在云服务器上 socket 服务器代码在 bind 的时候 IP 地址应该设置 云服务器的公网 IP, 本地才能连接上 , 不过如果是初学的话 建议设置 INADDR_ANY(0.0.0.0) 避免多个 IP 时出现连接不了的情况

如何将socket服务器部署到云服务器上插图11

客户端代码在 connect 的时候 IP 地址需要设置云服务器的公网 IP, 公网 IP 在服务器实例页面应该就能看到 , 如果没有的话 , 点进服务器实例详情肯定可以看到有了。

如何将socket服务器部署到云服务器上插图12

如何将socket服务器部署到云服务器上插图13

总结下 :

1. 设置云服务器安全组规则 , 开放端口和 IP

2. 服务器代码绑定的 IP 地址设置公网 IP 或者 INADDR_ANY( 也就是 0.0.0.0), 端口设置安全组中开放的端口范围内的端口号

3. 客户端 connect 时 设置 IP 应该是云服务器的公网 IP, 端口号应该和服务器代码中设置的端口号一致 , 是一个端口号 , 比如服务器 bind 的端口号是 8888 , 那么客户端也要是 8888

通过上面的设置应该就可以实现本机和外网通信了 , 如果都设置了 , 但是还连接不上的话 , 可以私信我 , 通过主页联系我 , 我可以无偿帮忙研究研究。

最后 , 感谢你能花时间来阅读该篇文章 , 希望能解决你的问题。

C++ 游戏服务器开发交流群 :136961182, 欢迎各位朋友一起交流

原文链接:https://blog.csdn.net/qq_40217173/article/details/122843024

正文完
 
追风者
版权声明:本站原创文章,由 追风者 2024-01-02发表,共计2424字。
转载说明:声明:本站内容均来自互联网,归原创作者所有,如有侵权必删除。 本站文章皆由CC-4.0协议发布。