libp2p学习记录二

简介: 验证libp2p例程

1.官网https://libp2p.io/
2.GitHub上源码:
https://github.com/libp2p/go-libp2p
https://github.com/libp2p/zeroconf
3.go-libp2p/examples/chat-with-mdns/
用于同一网段IP间通信,跨网段需要改源码
./chat-with-mdns -port 6666
./chat-with-mdns -port 6668

  1. zeroconf/examples/resolv/
    用于搜索启动mdns服务的设备,支持跨网段
    ./resolv

5.改动:将zeroconfig改为通过启动mdns服务方式,搜索附近设备,支持同网段间通信
1.创建密钥
prvKey, _, err := crypto.GenerateKeyPairWithReader(crypto.RSA, 2048, r)
2.创建libp2p主机
// 0.0.0.0 will listen on any interface device.
host, err := libp2p.New(
libp2p.ListenAddrs(sourceMultiAddr),
libp2p.Identity(prvKey),
)
3.创建流句柄
// Set a function as stream handler.
// This function is called when a peer initiates a connection and starts a

 stream with this peer.

host.SetStreamHandler(protocol.ID(cfg.ProtocolID), handleStream)
4.初始化mdns服务
peerChan := initMDNS(host, cfg.RendezvousString)
5.连接
for peer := range peerChan{
fmt.Println("Found peer:", peer, ", connecting")
PeerSlice = append(PeerSlice, peer)
//PeerSlice := make([]peer.AddrInfo, 10)
go func() {

  for i, v := range PeerSlice {
     fmt.Printf("i=%v, peerslice = %v\n",i, v)
     str1 := v.String()
     //fmt.Printf("str1 = %v\n",str1)
     str2 := strings.Split(str1, "/")
     //fmt.Printf("str2[0]=%s\n", str2[0])
     //fmt.Printf("str2[1]=%s\n", str2[1])
     //fmt.Printf("str2[2]=%s\n", str2[2])
     //fmt.Printf("str2[3]=%s\n", str2[3])
     //fmt.Printf("str2[4]=%s\n", str2[4])
     //str3 := "192.168.9.100"
     //if "192.168.1.100" == str2[2]
     if cfg.FindIp == str2[2]{
        //fmt.Println("get it \n\n\n")
        fmt.Println("Found peer:", v, ", connecting")


        if err := host.Connect(ctx, v); err != nil {
           fmt.Println("Connection failed:", err)
        }

    // open a stream, this stream will be handled by handleStream other end
        stream, err := host.NewStream(ctx, v.ID,           
          protocol.ID(cfg.ProtocolID))
       

if err != nil {

           fmt.Println("Stream open failed", err)
        } else {
           rw := bufio.NewReadWriter(bufio.NewReader(stream), bufio.NewWriter(stream))


           go writeData(rw)
           go readData(rw)
           fmt.Println("Connected to:", v)
        }
     }
  }

}()
}

相关文章
|
边缘计算 网络协议 网络架构
DoIP看这篇就够了,吐血整理
DoIP看这篇就够了,吐血整理
DoIP看这篇就够了,吐血整理
|
程序员 Go 网络安全
随笔第二周
且视他人之疑目如盏盏鬼火, 大胆去走你的夜路。 ——史铁生《病隙碎笔》
74 0
|
存储 Ubuntu 算法
KNIME学习记录
KNIME学习记录
722 0
|
SQL 关系型数据库 MySQL
MYSQL基础篇(1)| 青训营笔记
MYSQL基础篇(1)| 青训营笔记
79 0
MYSQL基础篇(1)| 青训营笔记
|
消息中间件 缓存 Kafka
【随笔】学习记录、实用脚本
文章目录 工作随笔 一、kafka 1.1 基础命令 二、es 1.1 基础命令 三、实用小脚本 3.1 判断文件中是否有某个对应的值
90 0
【随笔】学习记录、实用脚本
|
Java 编译器
Janino学习记录
Janino学习记录
899 0
|
机器学习/深度学习 人工智能 编译器
C#学习记录
C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。 本文章用于记录博主学习c#学习经历–学习笔记 文章目录前言一、工具和环境二、结构1.第一个程序2.读入数据三、数据类型四、运算符号五、判断语句六、C# 循环七、C# 数组(Array)总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 一、工具和环境 Microsoft Visu.
C#学习记录
|
安全 前端开发
一只菜鸟的学习记录
主要是介绍了本人的学习经历,以及分享在学习过程中所遇到的一些难题
一只菜鸟的学习记录
|
关系型数据库 MySQL Apache
冬季实战营学习记录三
冬季实战营第三期主要是对mysql数据库的进一步学习,并将实验一学习到的知识做了深一步的提高,看完之后让我对mysql更加熟悉和了解,借此将操作步骤记录下来,以供日后学习参考。
107 0
冬季实战营学习记录三
|
关系型数据库 MySQL PHP
冬季实战营学习记录一
主要记录如何配置apache和php,安装mysql和phpmyadmin
100 0
冬季实战营学习记录一