树莓派接入公网

Posted 行稳方能走远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派接入公网相关的知识,希望对你有一定的参考价值。

参照:树莓派接入公网
作者:图触靓
发布时间: 2020-12-22 17:28:19
网址:https://blog.csdn.net/bhbhhyg/article/details/107994829

为什么要接入公网

为了可以被非局域网设备访问、与非局域网设备通信。

接入公网的方法

1、下载工具huashenke

进入官网下载树莓派版本的到自己电脑,再拷贝到树莓派里面,或者通过FileZilla直接发送到树莓派上。
在这里插入图片描述

2、安装

通过ssh远程连接树莓派,进入有安装包的文件夹,输入指令

sudo dpkg -i phddns_3.0.4_systemd.deb
在这里插入图片描述

3、查看SN码与初始密码

一般安装完成后会直接看见SN码与初始密码:admin,如果没用看见SN码则输入指令: sudo phddns status
在这里插入图片描述

4、登录配置

浏览器输入远程管理地址进入远程管理页面,输入对应的SN码和密码,首次登录,需要进行初始化:重设密码,填写手机,发送验证码等
在这里插入图片描述
按照提示操作后我们进入管理页面 ,点击内网穿透->添加映射。

注意:

内网主机填写我们树莓派的ip地址(可以在树莓派内通过ifconfig命令查看自己的树莓派ip)

内网端口号和上面访问地址的端口号写一样!!
在这里插入图片描述
这样,树莓派的内网穿透便完成了。

5、配置树莓派服务器

我们在通过socket网络编程使用内网穿透,树莓派作为服务器配置网络ip与端口号时应当注意,ip要填树莓派自己的ip(也就是配置的内网主机ip),端口号要填在花生壳内设置一样的端口号

int initsocket(){
        int s_fd=socket(AF_INET, SOCK_STREAM,0);
        if (s_fd==-1)
        {
                perror("socket");
                exit(-1);
        }
        struct sockaddr_in addr;
        memset(&addr,0,sizeof(struct sockaddr_in));
 
        addr.sin_family=AF_INET;
        addr.sin_port=htons(56291);//填在花生壳内外网一样的端口号
        inet_aton("192.168.200.108",&addr.sin_addr);//填树莓派的内网ip
        //        addr.sin_port=htons(atoi(argv[2]));
        //       inet_aton(argv[1],&addr.sin_addr);
        int bid=bind(s_fd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in));
        listen(s_fd,10);
        int len=sizeof(struct sockaddr_in);
        return s_fd;
}

6、配置非局域网设备接入局域网内的客户端(以安卓为例)

连接时候的ip要填穿透的ip,点击我的应用里面的诊断,然后找到:域名IP地址指向,这个就是可被非局域网设备访问的ip。
在这里插入图片描述

安卓内连接树莓派服务器的核心配置代码

public void sendMessage() {
 
		new Thread(new Runnable() {
 
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
					 Socket client = new Socket("花生壳域名指向的ip地址",对应端口号);
					//Socket client = new Socket(StartActivity.IP, Integer.parseInt(StartActivity.Port));
					OutputStream out = client.getOutputStream();
					out.write(message.getBytes());
					
					out.close();
					client.close();
					
 
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}).start();
 
	}

检测是否穿透成功

安卓客户端使用移动数据流量,树莓派服务器使用wifi,这两个设备并不处在一个局域网内

安卓向树莓派发送指令 ,能够直接被树莓派接收到,说明穿透成功!

在这里插入图片描述

以上是关于树莓派接入公网的主要内容,如果未能解决你的问题,请参考以下文章

树莓派接入巴法云

智慧农业接入复合式树莓派网关

树莓派4B + Debian10 单臂路由

用树莓派搭建外网可以访问的服务器

品味树莓派:设置为无线接入点

云中树莓派:利用声音传感器控制Led灯