netKit

package
v3.0.19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 27, 2024 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package netKit

PS: Golang对于host的定义 不同于 js.

e.g. "127.0.0.1:8888" host in Golang: "127.0.0.1" host in js: "127.0.0.1:8888"

Index

Constants

View Source
const (
	DefaultHttpPort  = 80
	DefaultHttpsPort = 443

	// MaxPort 65535 == 0xFFFF
	MaxPort = 0xFFFF
)

Variables

View Source
var (
	// Listen 监听指定的网络地址.
	/*
		可能在以下几种情况下返回error:
		(1) 传参 network 不是有效值;
		(2) 传参 address 格式不正确;
		(3) 你试图监听的端口已经被其他进程占用; e.g. listen tcp 127.0.0.1:12345: bind: address already in use
		(4) 系统资源(如文件描述符)不足;
		(5) 如果你试图监听的端口号小于1024,而运行程序的用户没有足够的权限(通常需要 root 权限),函数将返回错误;
		(6) 如果网络出现问题(例如,网络接口不可用),函数将返回错误.

		@param network 网络类型,如: tcp、tcp4、tcp6、unix、unixpacket...
		@param address 监听的地址,格式为 ip:port,如果不指定 port,将由系统自动分配一个端口
	*/
	Listen func(network, address string) (net.Listener, error) = net.Listen

	// ResolveTCPAddr 将一个地址解析成TCP地址形式.
	/*
		@param network 网络类型, (1) 必须是: "tcp" || "tcp4" || "tcp6"
								(2) 如果是"",则默认为"tcp"
		@param address 地址
	*/
	ResolveTCPAddr func(network, address string) (*net.TCPAddr, error) = net.ResolveTCPAddr
)
View Source
var (
	// Dial Deprecated: Use DialTimeout instead.
	/*
		不推荐使用的原因: net.Dial如果连接的是未开放的端口,一个端口可能就是20s+.
	*/
	Dial func(network, address string) (net.Conn, error) = net.Dial

	// DialTimeout 建立一个到TCP服务器的连接.
	/*
		PS:
		(1) 可设置超时时间(如果超过 timeout 的指定的时间,连接没有完成,会返回超时错误);
		(2) 如果你需要更多的控制并且需要超时,你可以组合使用 net.Dialer结构体、Dialer.Dial、Dialer.DialContext.

		e.g.
			net.DialTimeout("tcp", "example.com:80", 5*time.Second)
	*/
	DialTimeout func(network, address string, timeout time.Duration) (net.Conn, error) = net.DialTimeout

	// DialTCP 建立一个到TCP服务器的连接.
	/*
		@param network 	网络类型,可以是"tcp"、“tcp4”(仅IPv4)、“tcp6”(仅IPv6)
		@param laddr	本地的TCP地址(通常设为nil,系统会自动选择一个本地地址和端口来建立连接)
		@param raddr	远程的TCP地址

		PS:
		(1) 相较于 net.DialTimeout ,此函数 提供了更多的控制,但不直接支持超时;
		(2) 如果你需要更多的控制并且需要超时,你可以组合使用 net.Dialer结构体、Dialer.Dial、Dialer.DialContext.
	*/
	DialTCP func(network string, laddr, raddr *net.TCPAddr) (*net.TCPConn, error) = net.DialTCP
)
View Source
var (
	// IsPingConnected 检查能否ping通主机.
	/*
		e.g.
			result1 := netutil.IsPingConnected("www.baidu.com")
		    result2 := netutil.IsPingConnected("www.!@#&&&.com")
		    fmt.Println(result1)	// true
		    fmt.Println(result2)	// false
	*/
	IsPingConnected func(hostname string) bool = netutil.IsPingConnected
)
View Source
var (
	// IsTelnetConnected 检查能否telnet到主机.
	/*
		PS: 超时时间为5s.

		e.g.
			result1 := netutil.IsTelnetConnected("www.baidu.com", "80")
			result2 := netutil.IsTelnetConnected("www.baidu.com", "123")
			fmt.Println(result1)	// true
			fmt.Println(result2)	// false
	*/
	IsTelnetConnected func(hostname string, port string) bool = netutil.IsTelnetConnected
)
View Source
var JoinHostPort func(host, port string) string = net.JoinHostPort

JoinHostPort

e.g.

("127.0.0.1", "80")	=> "127.0.0.1:80"
("", "8888") 		=> ":8888"
View Source
var (
	// SplitHostnamePort
	/*
		e.g.
			fmt.Println(SplitHostnamePort("localhost:8080")) // "localhost" "8080" <nil>
			fmt.Println(SplitHostnamePort("127.0.0.1")) // "" "" address 127.0.0.1: missing port in address
			fmt.Println(SplitHostnamePort("localhost")) // "" "" address localhost: missing port in address
	*/
	SplitHostnamePort func(host string) (hostname, port string, err error) = net.SplitHostPort
)

Functions

func AssertValidPort

func AssertValidPort(port int) error

func CanDial

func CanDial(addr string, timeout time.Duration) error

CanDial

@return 返回值如果为nil,说明能dial成功

func IsLocalPortAvailable

func IsLocalPortAvailable(port int) bool

IsLocalPortAvailable 本地端口是否可用(即未被占用)? Deprecated: 某些绑定非127.0.0.1的端口无法被检测到.

PS: 会优先判断端口是否有效(valid).

参考: Java,hutool中的NetUtil.isUsableLocalPort() golang端口占用检测的使用 https://wenku.baidu.com/view/25716f5b01768e9951e79b89680203d8ce2f6af5.html

func IsValidPort

func IsValidPort(obj interface{}) bool

IsValidPort

参考: (1) Java,hutool中的NetUtil.isValidPort() (2) Linux端口分配: https://blog.csdn.net/zh2508/article/details/104888743

0 不使用 1–1023 系统保留,只能由root用户使用 1024—4999 由客户端程序自由分配 5000—65535 由服务器端程序自由分配(65535 = 2 ^ 16 - 1)

@param obj (1) 支持的类型: reflect.Value、int、uint、string...

(2) 可以为nil

func JoinHostnameAndPort

func JoinHostnameAndPort(hostname string, port int) string

JoinHostnameAndPort

e.g.

fmt.Println(netKit.JoinHostnameAndPort("127.0.0.1", 80)) // 127.0.0.1:80
fmt.Println(netKit.JoinHostnameAndPort("", 8888))        // :8888

func ProcessAddresses

func ProcessAddresses(addresses []string) ([]string, error)

ProcessAddresses

@return 如果第二个返回值为nil,那么 len(第一个返回值) > 0

Types

type Address

type Address struct {
	// Hostname 包括ip
	Hostname string `json:"hostname" yaml:"hostname"`
	Port     int    `json:"port" yaml:"port"`
}

func ParseToAddress

func ParseToAddress(str string) (*Address, error)

ParseToAddress

e.g.

("https://127.0.0.1") 		=> "127.0.0.1:443", nil
("http://127.0.0.1:8888") 	=> "127.0.0.1:8888", nil
("https://blog.csdn.net/weixin_52428496/article/details/110159938") => "blog.csdn.net:443", nil

func (*Address) String

func (addr *Address) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL