socket实现无人机簇内簇间通信(包含AdHoc/AP-AC)

通信架构

  • 有三个无人机簇A,B,C
  • 簇内主节点分别为A0,B0,C0,他们之间采用Ad-hoc模式通信,使用外置网卡,【配置参考】
  • 同时簇内主节点A0,B0,C0分别还有一个内置网卡作为AP模式(ubuntu内置网卡开AP直接设置为热点模式即可,外置网卡设置AP模式【配置参考】
  • 簇内从节点之间可以互相通信,从节点都是AC模式即Managed模式。例如簇A的从节点A1想给簇B中的B1发送消息,都需要经过各自簇内的主节点

内置网卡设置AP模式(热点),图形化界面操作

 nm-connection-editor

ubuntu命令行连接wifi

 sudo service network-manager restart
 sudo nmcli dev wifi
 sudo nmcli dev wifi connect "CPS-AP-X" password "xxxxxxx"
 sudo nmcli connection show --active  #查看连接状态

只要通信硬件链路打通,不管是什么模式的通信,都可以上层用socket通信传输数据

接收端

# -*- coding: utf-8 -*-
import socket
import threading
import time

server_ip = "192.168.120.2"
server_port = 9999

def message_handle(client, ip):
    client_type = ''
    while True:
        try:
            rev_data = client.recv(4096)
            rev_data = rev_data.decode()
            print('receive: ',rev_data)
        except Exception:
            print(str(ip)+str(Exception))

if __name__ == '__main__':
    # 创建socket对象
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # AF_UNIX是本机的通信,AF_INET和AF_INET6分别是IPv4和IPv6     SOCK_STREAM流套接字, 采用了TCP协议、SOCK_DGRAM数据报套接字,采用了UDP协议、SOCK_RAW
 
    serversocket.bind((server_ip, server_port))
    # 监听client端的connect指令
    serversocket.listen(5)

    while True:
        clientsocket, addr = serversocket.accept()
        clientsocket.settimeout(120)
        print(addr,'linked')
        thd = threading.Thread(target=message_handle(), args=(clientsocket, addr))

        # 把接收端的数据实例化
        data = clientsocket.recv(1024)
        print(data)
        clientsocket.close()

    # thd = threading.Thread(target=run_receive(), args=('1'))
    # target:指定所创建的线程要调度的目标方法(最常用);
    # args:以元组的方式,为 target 指定的方法传递参数;

发送端

# -*- coding: utf-8 -*-
import socket

server_ip = "192.168.120.2"
server_port = 9999

if __name__ == '__main__':
    # 创建socket对象
    print(server_ip)
    clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clientsocket.settimeout(120)
    clientsocket.connect((server_ip, server_port))
    data = str(server_ip) + ' say hello!'
    clientsocket.send(data.encode())
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值