阿里云esc使用体验

简介: 阿里云飞天计划使用感受

本人介绍:
本人为长春理工大学人工智能学院20级机器人工程专业学生,最近由于长春疫情返回家中上网课,由于在自学TCPsocket通信中遇到一个问题,关于如何在公网中实现TCP通信,于是查阅资料后知道要想实现公网TCP通信就得有一个公网域名,于是我打算申请一个云服务器,用这个云服务器作为中转站,即可实现TCPsocket公网通信,于是在寻找云服务器的过程中我了解到了阿里云开发者飞天计划。
接下来我说一下在使用阿里云服务器的过程中遇到的问题。由于我使用云服务器主要是做TCP服务端,所以这就涉及到了TCP协议,以及IP和端口,在端口上面我是吃了大亏的,之前把程序写好后运行一直报错,一开始以为是端口防火墙问题,重新设置了很多次安全组以及防火墙,但一直没能解决问题,后来才发现原来是从Linux虚拟机复制粘贴过来的时候格式出了问题。然后我选择用Xshell将Linux虚拟机的文件传到windows,然后通过Xshell远程登陆阿里云,将文件传到云服务器上,再次编译,成功运行!
通过本次的实践,我掌握了云服务器的基本操作,加深了我对Linux命令行的理解,并且对TCP协议有了更深的认识,以后无论是学习UDP或者HTTP都能更快速的上手,接下来展示一下我做的TCP公网通信用阿里云服务器做转发,一个客户端为LinuxQT上位机,另外一个客户端为esp8266,通过qt上位机控制led灯的开闭。

客户端代码:

include "stdio.h"

include "stdlib.h"

include "assert.h"

include "string.h"

include "sys/types.h"

include "sys/socket.h"

include "arpa/inet.h"

include "netinet/in.h"

include "unistd.h"

include "pthread.h"

int ret;
int i=0;
int c_fd[2];
struct sockaddr_in saddr,caddr;
pthread_t t1;
pthread_t t2;
char BUFF1[256];
char BUFF2[256];
int read_1;
int read_2;
int param=100;

void thread1(void arg)
{
while(1)

{
memset(BUFF1,0,sizeof(BUFF1));
printf("Client1 address is %s\n",inet_ntoa(caddr.sin_addr));
read_1=read(c_fd[0],BUFF1,255);
if(read_1==-1) {printf("read client1 is error");}
else { printf("I read client1:%s\n",BUFF1);
write(c_fd[1],BUFF1,strlen(BUFF1));
}

}

}

void thread2(void arg)
{

while(1)
{
memset(BUFF2,0,sizeof(BUFF2));
printf("client2 address is %s\n",inet_ntoa(caddr.sin_addr));
read_2=read(c_fd[1],BUFF2,255);
if(read_2==-1) {printf("read client2 is error");}
else { printf("I read client2:%s\n",BUFF2);
write(c_fd[0],BUFF2,strlen(BUFF2));
}

}

}

int main()
{

    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    assert(sockfd!=-1);

// struct sockaddr_in saddr,caddr;

    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(8000);
    saddr.sin_addr.s_addr=inet_addr("172.17.124.48");
    int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
    assert(res!=-1);
    res=listen(sockfd,5);
    assert(res!=0);

    int len=sizeof(caddr);


    while(1)
    {
       if(i==0)
       {
       c_fd[i]=accept(sockfd,(struct sockaddr*)&caddr,&len);
            if(c_fd[i]<0){continue;}

i=1;

            printf("I am client1\n");
       }else {

          c_fd[i]=accept(sockfd,(struct sockaddr*)&caddr,&len);
         if(c_fd[i]<0){continue;}
          i=2;
          printf("I am client2\n");
     }

if(c_fd[0]==-1)

  {printf("client1 is connect error");}
    else
    { ret=pthread_create(&t1,NULL,thread1,(void *)&param);
    assert(ret!=-1);
    }

if(c_fd[1]==-1)

    {printf("client2 is connect error");}
    else
    { ret =pthread_create(&t2,NULL,thread2,(void *)&param);assert(res!=-1);}





    }

    return 0;

}

qt上位机:
S3O(U$)ZD)(~QX7O7ST9O(C.png
运行效果:

~~76E}}Y2S7WUSGI5`SPIZE.png

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 Java
HashMap之链表转红黑树(树化 )-treefyBin方法源码解读(所有涉及到的方法均有详细解读,欢迎指正)
本文详细解析了Java HashMap中链表转红黑树的机制,包括树化条件(链表长度达8且数组长度≥64)及转换流程,确保高效处理大量数据。
105 1
|
弹性计算 安全 Linux
esc使用体验心得
在我看来云服务器有以下优点:省力,不需要专门花时间去维护服务器的硬件,看服务器是否运行正常;稳定,这应该是最主要的有点;安全,做web开发最怕的当然是攻击,所以选择大厂的服务器,自然是最香的;省钱,这当然也是很重要的,尤其对于我们学生用户还是很友好的,爆赞!
|
弹性计算
个人使用ESC使用体验
在使用ESC过程中所完成的任务、遇到的困难以及解决的过程,在完成老师布置的任务过程中不断摸索并且不断进步的过程。
个人使用ESC使用体验
|
弹性计算 数据安全/隐私保护 应用服务中间件
我的ESC使用体验
云服务器(Elastic Compute Service, 简称ECS),是一种简单高效,处理能力可以弹性伸缩的计算服务。ECS的相关术语说明如下: --实例(Instance):是一个虚拟的计算环境,由CPU、内存、系统盘和运行的操作系统组成;ECS实例作为云服务器最为核心的概念,其他资源,比如磁盘、IP、镜像、快照等,只有与ECS结合后才具有使用意义。 --地域(Region):指ECS实例所在的物理位置。地域内的ECS实例内网是互通的,不同的地域之间ECS实例内网不互通。 --可用区(Zone):指在同一地域内,电力和网络互相独立的物理区域。 --磁盘(Disk):是为ECS实例
150 1
我的ESC使用体验
|
存储 前端开发 JavaScript
ESC的使用体验
使用阿里云的ESC的一些体验分享
ESC的使用体验
ESC使用体验
使用过程中的技巧和优势
|
安全 Linux 云计算
针对ESC的的使用体验
免费,简单操作,不用太多的配置就可以直接使用,不用太担心就是说来自系统层面的问题,可以安心使用
|
弹性计算 Linux 数据安全/隐私保护
esc使用体验
加入了阿里云的飞天计划,也是体验到了阿里云的esc云服务器,对我的日常学习和使用起到了很好的作业
|
JavaScript Unix 应用服务中间件
Node.js服务器启用Gzip压缩
Node.js服务器如何启用Gzip压缩
318 0
Node.js服务器启用Gzip压缩