2023年7月15日发(作者:)
实现本地主机与阿⾥云服务器的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 我这⾥选择的是镜像是 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 ⼀项。 然后进⾏对磁盘进⾏格式化,执⾏命令
3 /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);
_family = AF_INET;
_port = htons(8888); // 绑定的端⼝号,1024以下不要⽤ _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 :%sn", 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信息
_family = AF_INET;
_port = htons(8888); // 端⼝要和服务端绑定的⼀样
_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,运⾏效果如下:【本地主机】【云服务器】
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689409569a243443.html
评论列表(0条)