# p2p_transfer_proj **Repository Path**: marlinnie/p2p_transfer_proj ## Basic Information - **Project Name**: p2p_transfer_proj - **Description**: 开源P2P传输库开发项目。 - **Primary Language**: C - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-06-22 - **Last Updated**: 2025-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # p2p_transfer_proj #### 介绍 开源P2P传输库开发项目。 1、项目分为server端和client端,源码在Linux x86上面编译运行,server端主要运行在带有公网ip的vps主机上,用于简历各个client端的P2P连接; 2、client端是一个简单的测试程序,简单实现了通过server建立P2P并实现数据通信功能; #### 软件架构 软件架构说明 C - S //P2P连接建立流程 1、首先client端要login登录到服务器,这个时候服务器会保存client端的公网还有私网ip端口; 2、client A发MSG_C_HOLE消息到服务器,告诉服务器自己想跟client B建立P2P连接,消息携带了自己的公网私网ip端口信息,及client B的一个ID号; 3、服务器收到client A发过来的MSG_C_HOLE消息之后,给client B发一个MSG_C_HOLE_REQ消息告诉他client A想跟他建立P2P连接,消息携带了client A的公网ip端口信息; 4、client B收到服务器发过来的MSG_C_HOLE_REQ消息之后,会尝试给client A公网ip端口发一条MSG_C_P2P_CONN_REQ消息(clinet A收到这个消息之后并不理会),然后再发一条MSG_C_HAVE_SEND_P2P_REQ消息给服务器,告诉服务器我已经尝试过给client A发P2P消息; 5、服务器收到client B发过来的MSG_C_HAVE_SEND_P2P_REQ消息之后,给client A发送一条MSG_C_P2P_CAN_START_REQ消息告诉client A现在可以给client B直接发P2P连接请求了; 6、client A收到了服务器发过来的MSG_C_P2P_CAN_START_REQ消息之后,开始给client B发送MSG_C_P2P_START_REQ消息请求建立P2P连接,同时设置定时器,在定时器有效时间内尝试3次,如果3次都没收到client B的回复那么P2P连接就建立失败,走relay模式服务器转发消息; 7、如果client B收到client A发过来的MSG_R_P2P_START_RESP消息那么表明P2P连接成功建立,并发送MSG_C_HAVE_RECV_P2P_MSG_REQ消息给服务器收到了client A发过来的P2P消息; 8、如果client A尝试3次发送MSG_C_P2P_START_REQ给client B都没收到对方回复,那么就发送MSG_C_HAVE_RECV_P2P_MSG_REQ通知服务器P2P连接建立失败 #### 安装教程 1. 直接在Linux x86上执行make编译即可,生成server和client,server放到vps运行,client本地运行; #### 使用说明 1. server端放置在vps主机上运行; 2. 开启两个client端分别执行 ./client -u andy -r john ./client -u john -r andy 程序等待用户输入命令: login:登录命令; connect:建立P2P连接请求命令; talk:聊天命令; logout:注销命令; #### 参与贡献 1. Fork 本仓库 2. 新建 master 主分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)