硬件准备: 树莓派3b
软件准备:crt,花生壳
一、到花生壳官网下载树莓派版本到电脑,得到phddns_5.1.0_rapi_aarch64.deb文件,再通过FileZilla上传到树莓派
二、当然可以直接在树莓派中下载通过命令(因为我树莓派用的是3b,所以直接用dpkg -i phddns_3.0.4_systemd.deb),命令:wget http://download.oray.com/peanuthull/embed/phddns_3.0.4_systemd.deb
三、下载或上传完便可以安装
1.直接到用.deb文件的目录下,输入指令:sudo dpkg -i phddns_3.0.4_systemd.deb (注意要 sudo)
2.如上图,1为SN码(我这里没显示,继续看下操作),2为默认密码,以及下方的远程管理地址http://b.oray.com。
3.SN码没显示的,可以直接输入 sudo phddns status
四、点击远程管理地址 http://b.oray.com,下方选择SN登录。
1.输入刚刚树莓派上获取的SN码与密码登录,首次登录,需先激活。提供扫码激活和密码激活两种方式,可灵活选择。 ①扫码激活:需使用花生壳管理APP或微信进行扫码激活; ②密码激活:输入已注册的贝锐帐号密码激活。
2.激活成功后,进入花生壳管理平台。若绑定SN码的帐号只有动态域名解析功能,需使用内网穿透功能时,可点击“免费开通”,或直接将帐号升级到带内网穿透功能的服务版本。
五、添加内网穿透映射时,点击页面上的“增加映射”按钮。
注意:
内网主机填写我们树莓派的ip地址(可以在树莓派内通过ifconfig命令查看自己的树莓派ip)
内网端口号和上面访问地址的端口号写一样!!
下图显示,便完成树莓派的内网穿透(点击左下方诊断便可以看到域名ip地址的指向)
六、树莓派的服务器代码
#include<stdio.h>
#include <unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int s_fd;
int n_read;
char readBuf[128];
struct sockaddr_in s_addr;
struct sockaddr_in c_addr;
char *msg = "I get your connect";
memset(&s_addr,0,sizeof(struct sockaddr_in));
memset(&c_addr,0,sizeof(struct sockaddr_in));
//1.socket
s_fd=socket(AF_INET,SOCK_STREAM,0);
if(s_fd == -1){
perror("socket");
exit(-1);
}
s_addr.sin_family= AF_INET;
s_addr.sin_port = htons(8989); //端口号要和在花生壳内网主机设置的端口一致
inet_aton("192.168****",&s_addr.sin_addr);//填写的是内网主机的ip
//2.bind
bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
//3.listen
listen(s_fd,10);
int clen =sizeof(struct sockaddr_in);
int c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);
//4.accepet
if(c_fd == -1)
{
perror("accept");
}
printf("get connect: %s \n",inet_ntoa(c_addr.sin_addr));//要把网络格式的IP地址转化为字符串形式
//read
n_read = read(c_fd,readBuf,128);
if(n_read != -1)
{
perror("read");
}else{
printf("get message:%d,%s\n",n_read,readBuf);
}
//writed
write(c_fd,msg,strlen(msg));
printf("connect\n");
return 0;
}