技术文摘
Golang 中 Ping 命令的完整实现代码
2024-12-28 22:46:05 小编
Golang 中 Ping 命令的完整实现代码
在网络编程中,Ping 命令用于检测网络连接的可达性和延迟。在 Go 语言中,我们可以通过以下方式来实现 Ping 命令的功能。
我们需要导入必要的包:
import (
"fmt"
"net"
"time"
)
接下来,定义一个函数来执行 Ping 操作:
func ping(host string) {
// 解析目标主机的地址
addr, err := net.ResolveIPAddr("ip4", host)
if err!= nil {
fmt.Println("地址解析错误:", err)
return
}
// 创建 ICMP 连接
conn, err := net.DialIP("ip4:icmp", nil, addr)
if err!= nil {
fmt.Println("连接错误:", err)
return
}
defer conn.Close()
// 发送 ICMP 回显请求
message := []byte{8, 0, 0, 0, 0, 0, 0, 0}
_, err = conn.Write(message)
if err!= nil {
fmt.Println("发送请求错误:", err)
return
}
// 接收响应
buffer := make([]byte, 1024)
start := time.Now()
conn.SetReadDeadline(time.Now().Add(5 * time.Second))
n, err := conn.Read(buffer)
if err!= nil {
fmt.Println("接收响应错误:", err)
return
}
// 计算延迟
elapsed := time.Since(start)
fmt.Printf("Ping %s 成功,延迟: %v\n", host, elapsed)
}
在 main 函数中,我们可以调用 ping 函数来对指定的主机进行 Ping 操作:
func main() {
host := "example.com"
ping(host)
}
通过以上代码,我们成功地在 Go 语言中实现了 Ping 命令的基本功能。可以根据实际需求对代码进行进一步的优化和扩展,例如处理并发 Ping 多个主机、统计 Ping 的成功率和平均延迟等。
利用 Go 语言的网络编程能力,我们能够轻松实现各种网络相关的功能,为开发高效可靠的网络应用提供了有力的支持。
- Axios 网络请求源码新鲜出炉的阅读笔记,你能懂吗?
- 补充篇:六种 Python 批量合并同一文件夹内子文件夹 Excel 文件所有 Sheet 数据的方法
- 前端百题斩之通俗易懂的防抖与节流
- LeetCode - 探寻最长的镜像字符串
- Vue3 与 TypeScript 项目大量实践后的深思
- 阿里可观测性数据引擎的技术应用实践
- C 语言中动态扩容 string 的实现方法
- HarmonyOS ArkUI 仿微信朋友圈图片预览
- 为何 C/C++ 专门设计 Do…While ?
- MyBatis 批量插入数据:还用 foreach?服务器能撑住?
- 数据结构和算法中 K 次取反后数组和的最大化
- 科学家借 VR 技术“洞察”COVID-19 病毒蛋白内部以攻其弱点
- 2021 年 Google 开发者大会:助力优质应用打造,多维度提高开发效率
- Python 性能调优的十个小技巧,你了解多少?
- 2021 年 Google 开发者大会:打造高效机器学习生态