如果已经购买云服务器,会上传文件到服务器,并且可以连接到服务器执行命令行,则直接阅读 第3部分
1 背景介绍
在日常单片机/安卓开发过程当中,经常有一些小项目会用到C/S架构。比如,想要实现两个单片机想要实现远程通信,那么就不得不自己搭建一个服务器来实现转发(或许有其他方法)。这样两个单片机就可以通过一些通信模块(WIFI,GPRS等)来实现相互通信了。当然,我们可以在调试的过程中,完全可以利用自己的电脑搭建一个局域网内的通信。但是在实际中我们可能更加需要非局域网的通信,因此自己搭建一个阿里云(或者其他的)就很棒了。
以下内容均是自己(本科生)的一些理解,比较适合首次接触相关知识的人参考。而且自己刚接触这方面的知识,可能实际开发出来的东西比较简陋,也可能解释不正确,还请急时指出。
2 开发准备工作
- socket的基本知识,并且已经在本地实现相关功能。(如未实现,可先看TCP的本地实现方法)
- 软件:FileZilla
- 软件:Xshell
以上软件的安装包我已全部打包,点击下载 - 购买一个云服务器并安装操作系统(以下以阿里云为例)
2.1购买云服务器并安装操作系统(以阿里云为例)
1.如果是学生想要购买的话,比较便宜,大家可以直接去官网购买。为了方便我放个链接
2.注意:进入这个画面以后,选择需要注意的两个地方。第一,选择云服务器ECS,第二,地域那里选择离自己比较近的即可。然后按照步骤购买即可。
3.进入控制台。在控制台左侧选择 云服务器ECS 再选择,实例,在实例列表中即可看到你的服务器,其中IP地址下面有两个IP地址,公网IP即为你可用自己电脑访问的IP地址。
2.2 更换系统
- 上图中服务器右边操作那里点击:更多-更换系统盘(需要先停止服务器运行)
- 找到镜像市场,选一个镜像LNMP环境(CentOS7.x Nginx PHPx.x)然后点击同意即可。
- 弹出的页面中输入自己喜欢的登录密码,在页面右下角点击确定更换,稍等片刻系统即更新完。
2.3 修改安全组
- 打开控制台,在控制台左侧找到云服务器ESC,然后找到网络和安全-安全组,点击配置规则。
- 点击快速创建规则,选择80和443端口,授权对象写0.0.0.0/0
- 确定即可,此时在浏览器中输入公网IP即可访问。
2.4 Xshell登陆服务器
- 安装Xshell软件
- 找到实例的列表,在右侧操作一栏中选择更多-重置密码,将服务器的密码更换成你所喜欢的密码。
- 修改完密码后,同样在 操作一栏下选择 更多-重启
- 打开XSheel,选择新建,并如图配置。主机号改为自己的公网IP
- 输入用户名root
- 密码为刚刚改过的密码
- 如果是这样,表示连接成功。
2.5 FTP管理
- 安装FileZilla,修改传输模式为主动
- 参考2.3安全组的修改,分别开放20、21端口、1024-65535端口
- 在浏览器中输入自己的公网地址,左侧选择FTP管理,按照步骤创建账户。
- 进入FileZilla,下图红色框分别写:Host:自己的公网IP,UserName:刚刚新建的FTP用户名,Password:FTP密码,端口可不填。点击快速连接。
- 准备部分到此结束,接下来是我们今天的主题,将自己的Server.php挂在上面
3 将写好的程序上传到服务器
- 打开FileZilla,并连接到自己的服务器。
- 将自己的程序拖到文件夹default下面即可。程序下载地址,文件cloud-server中
如出现上述画面则说明已经完成。
4 在服务器上将程序运行起来
- 打开Xshell,并连接到自己的云服务器。
- 输入命令行 cd /data/wwwroot/default/socket/
- 此时,已经到了server.php文件所在目录,如果是直接放到default中,则输入到default即可。
- 输入命令行 nohup php server.php &
- 此时提示如下。则说明程序已经挂在了后台运行,进程号为5553,关闭Xshell,进行测试即可。
- 我们看一下进程里有没有,输入命令行ps -x
5 测试运行结果
- 然后,我们就可以连接过来进行通信啦。测试一下,打开电脑CMD,然后运行一下客户端程序,程序里面把连接的IP地址改为自己的"公网地址",端口号改为"8080"(以server.php中端口号为准)。
- 运行结果如下,运行client.php。 下载链接(colud-server)
- 我们换一种测试方式,比较常用的网络调试工具:网络调试助手。打开以后按照如下设置:1. TCP Client、2. 公网IP、3. 8080(以server.php为准)
- 发送数据:helloword
- 结果如下
到这里,我们已经将程序挂在了上面,如果想要什么特殊功能只需要修改server.php并重新上传并运行即可。可以通过kill xxx(进程号)来关闭进程,然后再重新运行。
以上内容是我第一次尝试,可能会有很多问题,但是至少实现了我想要的功能,虽然比较简陋,但是我可以在平时利用他完成一些简单的“玩具”。
如果大家有任何疑问,请留言(已开通邮箱提醒,会及时回复)。