【笔记】GO编程中IP地址及端口号变量不同类型的相互转化


最近在学习写一个基于SOCKS5协议的代理服务器,过程中频繁用到各种IP地址和端口号数据类型的相互转换,比如net.TCPAddr、string字符串型的“127.0.0.1:8080”、[]byte切片型、int型,非常混乱。特在这里做个总结备忘,第一篇博客,就献给这一问题吧!

一、格式种类

我们在GO网路编程中,常用的IP地址和端口号,大概有一下三种。

(1)net.TCPAddr(IP/UDP)

定义在net包中。在我们调用listen、dial等函数时,输入的参数就是这种格式,它的定义是:

type TCPAddr struct {
	IP   IP //其中:type IP []byte
	Port int
	Zone string // IPv6 scoped addressing zone
}
p.s.
func IPv4(a, b, c, d byte) IP {
	p := make(IP, IPv6len)
	copy(p, v4InV6Prefix)
	p[12] = a
	p[13] = b
	p[14] = c
	p[15] = d
	return p
}

(2)string型"127.0.0.1:8080"

在两个函数之间传值,推荐转化成这种格式传值。千万要杜绝使用[]byte传值,因为[]byte对应的底层数组没有变

(3)[]byte切片

手动构造数据包内容的时候,会用到它。另外,IP是[]byte格式

二、转换方法

1、net.TCPAddr(IP/UDP)转string字符串

方法:调用net.XXXAddr的String()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值