失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 实现本地主机与阿里云服务器的UDP通信

实现本地主机与阿里云服务器的UDP通信

时间:2020-02-29 18:46:11

相关推荐

实现本地主机与阿里云服务器的UDP通信

0、概述

感谢 CSDN 赠送的阿里云免费套餐半年使用权,让我有机会与阿里云来个亲密接触。本文是关于如何开通云服务器 ECS、如何登录及使用 ECS,以及通过简单的 UDP 通信实现本地主机与阿里云服务器的连接。

阿里云有很多种产品,主要的几种产品介绍如下:

ECS (Elastic Compute Service):以虚拟机的方式将一台物理机分成多台云服务器,提供可伸缩的计算服务。SLB (Server Load Balance):基于LVS和Tengine实现的4层和7层负载均衡,有动态扩容,session保持等特点。RDS (Relational Database Service);:通过云服务的方式让关系型数据库管理、操作和扩展变得更加简单。OCS (Open Cache Service):基于内部Tair,增加一层Proxy,支持海量小数据的高速访问。OTS(Open Table Service):海量(结构化)数据存储和实时查询服务。OSS(Open Store Service):对任意大小数据对象提供高可用,高可靠的海量存储服务。CDN(Content Delevery Network):通过覆盖全网的缓存服务以及负载均衡等技术将用户请求定向到最合适的区域,提高用户服务的响应速度及网站服务能力。OAS (Open Archive Service):离线归档,冷数据备份,类似Amazon Glacier。ODPS(Open Data Processing Service):海量数据处理和分析平台。SLS (Simple Log Service):解决异构、分布式系统中日志实时收集、存储与查询的基础服务。

1、开通云服务器 ECS

开通云服务器 ECS 的步骤很简单,进入阿里云官网(/),找到“产品与服务” –> “云计算基础服务” –> “弹性计算” –> “云服务器 ECS”。点击进入购买页面,根据实际应用需求进行配置,具体可以参考:/edu/lesson/play/498 。由于我的是免费体验套餐,可选项较少,因此很快就完成开通了。

我这里选择的是镜像是 Ubuntu 16.04 64bit,完成 ECS 的开通后就可以进入管理后台。可以看到,分配的公网 IP 为 120.77.200.26,之后我们就可以通过这个公网 IP 进行登录以及网络访问了。

2、登录及使用 ECS

我们可以在本地 Ubuntu 中通过 SSH 登录到云服务器 ECS,执行如下命令:

$ ssh root@120.77.200.26

输入云服务器的 root 账户密码即可登录,如下:

我们可以简单查看一些云服务器 ECS 的信息,如uname -a查看内核版本:

df -h查看磁盘空间:

fdisk -l查看硬盘及其参数信息:

在这里我们发现 /dev/vda1 可用,而 /dev/vdb 的 20GB 磁盘分区还没有挂载,我们去阿里云管理后台查看,确实存在一块 20GB 的高效云盘。所以我们需要将它挂载,以便使用。

执行fdisk /dev/vdb进行磁盘分区及格式化操作。输入“n”新建一个分区,Partition type 选择“p”,Partition number 选择“1”,First sector 和 Last sector 选择默认即可,之后输入“wq”保存退出。整个过程如下:

fdisk -l检查一下,可以看到比刚才多了 /dev/vdb1 一项。

然后进行对磁盘进行格式化,执行命令mkfs.ext3 /dev/vdb1,稍等一会即格式化完毕,如下:

然后挂载磁盘,执行如下命令:

$ echo /dev/vdb1 /mnt ext3 default 0 0 >> /etc/fstab

执行cat /etc/fstab检查是否写成功。然而此时挂载并没有生效,所以我们还需要手动挂载一下,命令如下:

$ mount /dev/vdb1 /mnt

之后再次用df -h查看,可以看到 /dev/vdb1 已经挂载成功,挂载点正是 /mnt 目录,如下:

3、实现 UDP 通信

我们在云服务器 ECS 作为 UDP 通信的 Server,本地主机作为 Client。代码如下:

【服务端 server.c】

// 头文件省略char rbuf[50]; int main() { int sockfd; int size; int ret; int on =1; struct sockaddr_in saddr; struct sockaddr_in raddr; // 设置地址信息,ip信息 size = sizeof(struct sockaddr_in); bzero(&saddr, size); saddr.sin_family = AF_INET; saddr.sin_port = htons(8888); // 绑定的端口号,1024以下不要用saddr.sin_addr.s_addr = htonl(INADDR_ANY); // 创建udp 的套接字 sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd<0) { perror("socket failed"); return -1; } // 设置端口复用 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));// 绑定地址信息,ip信息 ret = bind(sockfd, (struct sockaddr*)&saddr, sizeof(struct sockaddr)); if(ret<0) { perror("sbind failed"); return -1; } int val = sizeof(struct sockaddr); // 循环接收客户端发来的消息 while(1) { puts("waiting data ......"); ret=recvfrom(sockfd, rbuf, 50, 0, (struct sockaddr*)&raddr, &val); if(ret <0) { perror("recvfrom failed"); } printf("the data :%s\n", rbuf); bzero(rbuf, 50); } close(sockfd); return 0; }

【客户端 client.c】

// 头文件省略 char wbuf[50]; int main() { int sockfd; int size,on = 1; struct sockaddr_in saddr; int ret; size = sizeof(struct sockaddr_in); bzero(&saddr, size); // 设置地址信息,ip信息 saddr.sin_family = AF_INET; saddr.sin_port = htons(8888); // 端口要和服务端绑定的一样 saddr.sin_addr.s_addr = inet_addr("120.77.200.26");// 120.77.200.26 为云服务器的公网ip,这个很重要! // 创建udp 的套接字 sockfd= socket(AF_INET, SOCK_DGRAM,0); if(sockfd<0) { perror("failed socket"); return -1; } // 设置端口复用 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); // 循环发送信息给服务端 while(1) { puts("please enter data:"); gets(wbuf); ret=sendto(sockfd, wbuf, 50, 0, (struct sockaddr*)&saddr, sizeof(struct sockaddr)); if(ret<0) { perror("sendto failed"); } bzero(wbuf, 50); } close(sockfd); return 0; }

分别在云服务器和本地主机上编译 server.c 和 client.c,运行效果如下:

【本地主机】

【云服务器】

如果觉得《实现本地主机与阿里云服务器的UDP通信》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。