netKit

package
v3.1.112 Latest Latest
Warning

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

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

Documentation

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 (
	// SplitHost
	/*
		e.g.
			fmt.Println(SplitHost("localhost:8080")) // "localhost" "8080" <nil>
			fmt.Println(SplitHost("127.0.0.1")) // "" "" address 127.0.0.1: missing port in address
			fmt.Println(SplitHost("localhost")) // "" "" address localhost: missing port in address
	*/
	SplitHost func(host string) (hostname, port string, err error) = net.SplitHostPort
)

Functions

func AssertHost added in v3.0.100

func AssertHost(host string) error

func AssertHostname added in v3.0.100

func AssertHostname(hostname string) error

func AssertValidPort

func AssertValidPort(port int) error

func DialContext added in v3.0.106

func DialContext(ctx context.Context, network, address string) (net.Conn, error)

func IsHost added in v3.0.99

func IsHost(str string) bool

func IsHostname added in v3.0.99

func IsHostname(str string) bool

func IsPort added in v3.0.100

func IsPort(obj interface{}) bool

IsPort 是否是有效的端口号?(0, 65535]

参考: (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 JoinToHost added in v3.0.87

func JoinToHost(hostname string, port int) string

JoinToHost

@param hostname (1) 支持: ipv4、ipv6

(2) ipv6的话,最前和最后不要带上中括号

e.g.

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

e.g.1 ipv6

("::1", 8888) => "[::1]:8888"

func PolyfillHosts added in v3.0.99

func PolyfillHosts(hosts []string, minCount int) ([]string, error)

PolyfillHosts

PS: (1) host包含 ip 和 port. e.g."127.0.0.1:80"

@param minCount 至少要有几个元素?

@return 第1个返回值: 可能是一个新的slice实例

Types

This section is empty.

Jump to

Keyboard shortcuts

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