树莓派远程通信(可外网访问)

一,配置树莓派

先装系统,这里网上教程比较多不在赘述了。

二,分配固定IP

这里方法有很多种,简述其中一种。装好系统盘后boot下有个名为cmdline.txt的文件,前面加上ip=想分配给树莓派的固定ip。(记得后面加个空格)
如图:
在这里插入图片描述
现在给树莓派插上网线会自动获取192.168.1.123这个ip。
注意:192.168.1.xx 是我路由器的网段,不一定适合所有人。可以在cmd输入ipconfig查看你电脑的ip。
举个例子:
在这里插入图片描述
可以看到此时我是WLAN连接,ip为192.168.1.105,子网掩码255.255.255.0所以此时的网段就是192.168.1.xx
如果子网掩码是255.255.0.0,那网段就是192.168.xx.xx
子网掩码只能是0或255
如果你的ip是10.1.1.23,子网掩码为255.255.255.0,给固定ip时要写10.1.1.x(x是你任意指定的值尽量在10-240)

三,内网穿透

由于此时我们的树莓派连的是局域网,可以访问公网,但无法通过公网访问树莓派实现远程控制与信息交互。所以要将我们的ip与端口映射到公网。这个网上有很多产品,每家的产品使用方法也不相同。但最后都会给你一个域名,一个端口。会将自己树莓派的ip和端口映射到他们端口(建议选择22端口号,是用于ssh连接的,也可以将ssh的22端口号改到其他端口,此时选择你改的端口号)。记好给的域名与端口号。

四,链接

方式1:putty连接
HostName输入给的域名(如果想填ip,可以通过命令:nslookup 域名 来解析域名的IP地址)

Port输入给的端口号(一般都几千以上)

点open,再输入你树莓派的用户名和密码即可。
在这里插入图片描述

方式2:
脚本连接:
这里找了一个比较好用的python脚本
文件上传下载:

import paramiko

trans = paramiko.Transport(
    sock=("填写用nslookup解析出来的域名ip地址", 12345) #12345是分配给我的端口号,改成你的
)

trans.connect(
    username="raspberry用户名",
    password="raspberry密码"
)
sftp = paramiko.SFTPClient.from_transport(trans)

# 上传
# 把本地的文件单表替换加密.txt,上传到远端为/home/pi/test/1.txt
sftp.put("单表替换加密.txt", "/home/pi/test/1.txt")

# 下载
# 从远程/root/Desktop/hh.py获取文件下载到本地名称为hh.py
# sftp.get("/root/Desktop/hh.py","hh.py")

sftp.close()

python脚本输入命令:

import paramiko

# 创建一个ssh的客户端,用来连接服务器
ssh = paramiko.SSHClient()
# 创建一个ssh的白名单
know_host = paramiko.AutoAddPolicy()
# 加载创建的白名单
ssh.set_missing_host_key_policy(know_host)

# 连接服务器
ssh.connect(  #与上面同理
    hostname="IP",
    port=12345,
    username="用户名",
    password="密码"
)

# 执行命令
stdin, stdout, stderr = ssh.exec_command("ls")
# stdin  标准格式的输入,是一个写权限的文件对象
# stdout 标准格式的输出,是一个读权限的文件对象
# stderr 标准格式的错误,是一个写权限的文件对象


print(stdout.read().decode())  #会输出ls的执行结果


ssh.close()

此刻,即使你与树莓派相隔万里,也能实时通信。
方式三
终端链接
ssh -p xx user@ip xx 为 端口号 user为用户名 ip为要登陆的ip

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
是的,树莓派上的 socket 编程可以实现异地远程通信。在树莓派上,您可以使用 socket 模块来创建 TCP/IP socket,并使用 connect() 方法连接到远程服务器,或者使用 bind() 方法绑定本地 IP 和端口,然后使用 listen() 方法监听连接请求,再使用 accept() 方法接受连接请求,从而实现与远程服务器的通信。 在使用 socket 进行异地远程通信时,您需要首先获取远程服务器的 IP 地址和端口号,并使用这些信息创建一个 TCP/IP socket 来进行通信。然后,您可以使用 sendall() 方法向远程服务器发送数据,并使用 recv() 方法接收远程服务器发送的响应数据。最后,您可以使用 close() 方法关闭连接以释放资源。 下面是一个使用 Python 实现异地 TCP 通信的示例代码: ```python import socket # 创建 TCP/IP socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接远程服务器 server_address = ('remote_ip_address', remote_port) sock.connect(server_address) try: # 发送数据 message = 'Hello, I am Raspberry Pi!' sock.sendall(message.encode()) # 接收响应数据 data = sock.recv(1024) print('received {!r}'.format(data.decode())) finally: # 关闭连接 sock.close() ``` 在上面的代码中,我们首先创建了一个 TCP/IP socket,并使用 connect() 方法连接到指定的远程服务器。然后,我们使用 sendall() 方法向远程服务器发送数据,并使用 recv() 方法接收远程服务器发送的响应数据。最后,我们关闭连接以释放资源。 注意,在进行异地通信时,要确保网络连接的稳定性和安全性,以确保数据能够稳定地传输。同时,您也需要注意异地通信的延迟和带宽问题,以确保通信的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiYH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值