socket TCP:在阿里云ESC上搭建自己的TCP服务端程序

如果已经购买云服务器,会上传文件到服务器,并且可以连接到服务器执行命令行,则直接阅读 第3部分(记得提前配置安全组)

1 背景介绍

在日常单片机/安卓开发过程当中,经常有一些小项目会用到C/S架构。比如,两个单片机想要实现远程通信,那么就不得不自己搭建一个服务器来实现转发(或许有其他方法)。这样两个单片机就可以通过一些通信模块(WIFI,GPRS等)来实现相互通信了。当然,在调试的过程中,完全可以利用自己的电脑搭建一个局域网内的通信。但是在实际项目中我们可能更加需要非局域网的通信,因此自己搭建一个阿里云(或者其他的)就很棒了。
以下内容均是自己(刚入门时)的一些理解,比较适合首次接触相关知识的人参考。而且自己刚接触这方面的知识,可能实际开发出来的东西比较简陋,也可能解释不正确,还请急时指出。

2 开发准备工作

  1. socket的基本知识,并且已经在本地实现相关功能。(如未实现,可先看TCP的本地实现方法
  2. 软件:FileZilla
  3. 软件:Xshell
    以上软件的安装包我已全部打包,点击下载
  4. 购买一个云服务器并安装操作系统(以下以阿里云为例)
2.1购买云服务器并安装操作系统(以阿里云为例)

1.如果是学生想要购买的话,比较便宜,大家可以直接去官网购买。为了方便我放个链接
2.注意:进入这个画面以后,选择需要注意的两个地方。第一,选择云服务器ECS,第二,地域那里选择离自己比较近的即可。然后按照步骤购买即可。
在这里插入图片描述
3.进入控制台。在控制台左侧选择 云服务器ECS 再选择,实例,在实例列表中即可看到你的服务器,其中IP地址下面有两个IP地址,公网IP即为你可用自己电脑访问的IP地址。
在这里插入图片描述

2.2 更换系统
  1. 上图中服务器右边操作那里点击:更多-更换系统盘(需要先停止服务器运行)
  2. 找到镜像市场,选一个镜像LNMP环境(CentOS7.x Nginx PHPx.x)然后点击同意即可。
  3. 弹出的页面中输入自己喜欢的登录密码,在页面右下角点击确定更换,稍等片刻系统即更新完。
2.3 修改安全组
  1. 打开控制台,在控制台左侧找到云服务器ESC,然后找到网络和安全-安全组,点击配置规则。
    在这里插入图片描述
  2. 点击快速创建规则,选择80和443端口,授权对象写0.0.0.0/0
    在这里插入图片描述
  3. 确定即可,此时在浏览器中输入公网IP即可访问。
2.4 Xshell登陆服务器
  1. 安装Xshell软件
  2. 找到实例的列表,在右侧操作一栏中选择更多-重置密码,将服务器的密码更换成你所喜欢的密码。
  3. 修改完密码后,同样在 操作一栏下选择 更多-重启
  4. 打开XSheel,选择新建,并如图配置。主机号改为自己的公网IP
    在这里插入图片描述
  5. 输入用户名root
  6. 密码为刚刚改过的密码
  7. 如果是这样,表示连接成功。
    在这里插入图片描述
2.5 FTP管理
  1. 安装FileZilla,修改传输模式为主动
    在这里插入图片描述
  2. 参考2.3安全组的修改,分别开放20、21端口、1024-65535端口
    在这里插入图片描述在这里插入图片描述
  3. 在浏览器中输入自己的公网地址,左侧选择FTP管理,按照步骤创建账户。
    在这里插入图片描述
  4. 进入FileZilla,下图红色框分别写:Host:自己的公网IP,UserName:刚刚新建的FTP用户名,Password:FTP密码,端口可不填。点击快速连接。
  5. 准备部分到此结束,接下来是我们今天的主题,将自己的Server.php挂在上面

3 将写好的程序上传到服务器

  1. 打开FileZilla,并连接到自己的服务器。
  2. 将自己的程序拖到文件夹default下面即可。程序下载地址,文件cloud-server中
    在这里插入图片描述
    如出现上述画面则说明已经完成。

4 在服务器上将程序运行起来

  1. 打开Xshell,并连接到自己的云服务器。
  2. 输入命令行 cd /data/wwwroot/default/socket/
  3. 此时,已经到了server.php文件所在目录,如果是直接放到default中,则输入到default即可。
  4. 输入命令行 nohup php server.php &
  5. 此时提示如下。则说明程序已经挂在了后台运行,进程号为5553,关闭Xshell,进行测试即可。
    在这里插入图片描述
  6. 我们看一下进程里有没有,输入命令行ps -x
    在这里插入图片描述

5 测试运行结果

  1. 然后,我们就可以连接过来进行通信啦。测试一下,打开电脑CMD,然后运行一下客户端程序,程序里面把连接的IP地址改为自己的"公网地址",端口号改为"8080"(以server.php中端口号为准)。
  2. 运行结果如下,运行client.php下载链接(colud-server)
    在这里插入图片描述
  3. 我们换一种测试方式,比较常用的网络调试工具:网络调试助手。打开以后按照如下设置:1. TCP Client、2. 公网IP、3. 8080(以server.php为准)
  4. 发送数据:helloword
  5. 结果如下
    在这里插入图片描述

到这里,我们已经将程序挂在了上面,如果想要什么特殊功能只需要修改server.php并重新上传并运行即可。可以通过kill xxx(进程号)来关闭进程,然后再重新运行。

以上内容是我第一次尝试,可能会有很多问题,但是至少实现了我想要的功能,虽然比较简陋,但是我可以在平时利用他完成一些简单的“玩具”。

如果大家有任何疑问,请留言(已开通邮箱提醒,会及时回复)。

  • 11
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
当然,我可以帮你写一个简单的C语言TCP服务端程序。以下是一个基本的示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define MAX_BUFFER_SIZE 1024 #define PORT 8080 int main() { int server_fd, new_socket, valread; struct sockaddr_in address; int opt = 1; int addrlen = sizeof(address); char buffer[MAX_BUFFER_SIZE] = {0}; char *hello = "Hello from server"; // 创建套接字 if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed"); exit(EXIT_FAILURE); } // 设置套接字选项,允许多个连接 if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) { perror("setsockopt failed"); exit(EXIT_FAILURE); } // 设置服务器地址和端口 address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons(PORT); // 绑定套接字到指定的IP地址和端口 if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) { perror("bind failed"); exit(EXIT_FAILURE); } // 监听套接字,并设置最大连接数 if (listen(server_fd, 3) < 0) { perror("listen failed"); exit(EXIT_FAILURE); } // 接受客户端连接 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) { perror("accept failed"); exit(EXIT_FAILURE); } // 从客户端接收消息并发送回复 valread = read(new_socket, buffer, MAX_BUFFER_SIZE); printf("Client: %s\n", buffer); send(new_socket, hello, strlen(hello), 0); printf("Hello message sent\n"); return 0; } ``` 这是一个简单的TCP服务端程序,它会监听指定的端口(这里是8080),接受客户端的连接,并向客户端发送"Hello from server"的消息。你可以根据自己的需求进行修改和扩展。记得在编译时链接`-lpthread`库。 请注意,这只是一个简单的示例程序,并未进行任何错误处理和完善的功能。在实际使用中,你可能需要添加错误处理、断开连接、多线程等功能来提高程序的健壮性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值