这里是读取本地文件的所调用的函数
func ParseNode(rawurl string) (*Node, error) {
    if m := incompleteNodeURL.FindStringSubmatch(rawurl); m != nil {
        id, err := HexID(m[1])
        if err != nil {
            return nil, fmt.Errorf("invalid node ID (%v)", err)
        }
        return NewNode(id, nil, 0, 0), nil
    }
    return parseComplete(rawurl)
}
func parseComplete(rawurl string) (*Node, error) {
    var (
        id NodeID
        ip net.IP
        tcpPort, udpPort uint64
    )
    u, err := url.Parse(rawurl)
    if err != nil {
        return nil, err
    }
    if u.Scheme != "enode" {
        return nil, errors.New("invalid URL scheme, want "enode"")
    }
    // Parse the Node ID from the user portion.
    if u.User == nil {
        return nil, errors.New("does not contain node ID")
    }
    if id, err = HexID(u.User.String()); err != nil {
        return nil, fmt.Errorf("invalid node ID (%v)", err)
    }
    // Parse the IP address.
    host, port, err := net.SplitHostPort(u.Host)
    if err != nil {
        return nil, fmt.Errorf("invalid host: %v", err)
    }
    if ip = net.ParseIP(host); ip == nil {
        return nil, errors.New("invalid IP address")
    }
    // Ensure the IP is 4 bytes long for IPv4 addresses.
    if ipv4 := ip.To4(); ipv4 != nil {
        ip = ipv4
    }
    // Parse the port numbers.
    if tcpPort, err = strconv.ParseUint(port, 10, 16); err != nil {
        return nil, errors.New("invalid port")
    }
    udpPort = tcpPort
    qv := u.Query()
    if qv.Get("discport") != "" {
        udpPort, err = strconv.ParseUint(qv.Get("discport"), 10, 16)
        if err != nil {
            return nil, errors.New("invalid discport in query")
        }
    }
    return NewNode(id, ip, uint16(udpPort), uint16(tcpPort)), nil
}
--------------------- 
作者:不折腾就闹心 
来源:CSDN 
原文:https://blog.csdn.net/DDFFR/article/details/79228539 












 
					 
				
			 
				 IP短视频
IP短视频 C/C++
C/C++ 狂野架构师
狂野架构师 AI智能应用开发(Java)
AI智能应用开发(Java) AI大模型开发(Python)
AI大模型开发(Python) AI鸿蒙开发
AI鸿蒙开发 AI嵌入式+机器人开发
AI嵌入式+机器人开发 前端开发
前端开发 AI大数据开发
AI大数据开发 AI运维
AI运维 AI测试
AI测试 AI设计
AI设计 AI视频创作与直播运营
AI视频创作与直播运营 C/C++
C/C++ 产品经理
产品经理 拍摄剪辑+短视频制作
拍摄剪辑+短视频制作 PMP项目管理认证
PMP项目管理认证 电商运营
电商运营 Go语言与区块链
Go语言与区块链 大数据
大数据 PHP工程师
PHP工程师 Android+物联网
Android+物联网 iOS
iOS .NET
.NET
 
									 
									 
								




 苏公网安备32132202000574号
 苏公网安备32132202000574号