# udp_hole_punching **Repository Path**: gitee211012/udp_hole_punching ## Basic Information - **Project Name**: udp_hole_punching - **Description**: UDP hole punching - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-10-20 - **Last Updated**: 2023-07-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: udp, hole, punching, Go语言 ## README # UDP打洞 ## 介绍 ### Server * 通讯协议简单 * 可作为通用的UDP打洞服务器 * 仅支持点对点打洞 ### Client * 仅作为UDP打洞的参考代码 ## 流程 1. 客户端A和客户端B事先约定标识符Y,服务器S通过标识符确定哪两个客户端之间进行打洞; 2. A向S发送Y,并记录A本地使用的UDP端口P1,S上用标识符Y作为key,A的公网IP和端口作为value存入map,暂不应答A; 3. B向S发送Y,并记录B本地使用的UDP端口P2,S通过标识符Y在map中找到之前记录的A的公网IP和端口,然后发送给B,同时把B的公网端口和IP发送给A; 4. A收到S发来的B的外网IP和端口,A关闭与S的连接,A绑定P1对B发送数据; 5. B收到S发来的A的外网IP和端口,B关闭与S的连接,B绑定P2对A发送数据。