# libucp2p **Repository Path**: wefeng/libucp2p ## Basic Information - **Project Name**: libucp2p - **Description**: 网上找的p2p项目,没有跑过,保存一下 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-05-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # libucp2p #### 项目介绍 ucp2p 库是一个简单利用 udp 打洞 以及 服务器中转 方式实现简单 P2P 通信 的 c 库。 #### 软件架构 软件架构说明 #### 安装教程 ``` 1. 需要注意的是,ucp2p 库依赖于其他库,请确认其它库已经安装好 客户端 依赖的库有: pthread openssl json -lpthread -lssl -lcrypto -lm -ljson 服务器依赖的库有: pthread openssl json sqlclient -lpthread -lssl -lcrypto -lm -ljson -lmysqlclient 如果没有安装好对应的lib库,请执行: apt-get install openssl-dev apt-get install libjson0 安装mysql 数据库。具体安装参考百度 1. sudo apt-get install mysql-server    2. apt-get install mysql-client    3. sudo apt-get install libmysqlclient-dev 2. 确认所有库都安装好后,执行 make 即可 3. 如果没有意外的话,编译通过后会在当前目录下生成下面几个文件 p2p_client : P2P的简单客户端 p2p_server : P2P的简单服务器程序 libp2p-client.so : P2P 客户端依赖的动态库 libp2p-server.so : P2P 服务器端依赖的动态库 4 把 libp2p-client.so libp2p-server.so 拷贝到 /usr/lib/ 下面 ``` #### 使用说明 ``` 该库提供几个简单的接口函数 简单的接口函数: p2p_client_init 初始化。该函数必须被调用,且只能调用一次。初始化整个协议栈。 发送函数 sendto_node_reliable 这是一个相对可靠的传输。它有这等待对方应答,且无应答重复发送 3 次的机制, 因而,如果该函数返回值大于 0 ,则说明发送成功,而且对方已经应答 sendto_node_unreliable 这是一个不可靠的传输。类似于 udp,也就是说,该函数返回值大于,表示数据已经 发送出去,但是,对方是否能收到,是不能保证的。 set_recv_list //初始化接收队列 初始化接收队列,一般跟 p2p_client_init 函数放在入口处,初始化整个协议栈 recv_node_data //从接收数据队列中取出一个数据 接收数据。无数据时该函数会休眠。 使用例子: int main(void) { /* 1 初始化整个协议栈 */ p2p_client_init(); /* 2 初始化接收队列 */ set_recv_list(1); /* 2 向 名为 Tom 的节点发送数据 数据内容为 hello my name is Jack 该函数进入休眠,直到对方应答或者超时 */ char *str = "hello my name is Jack" if(sendto_node_reliable("Tom", str, strlen(str), 20) == -1) { printf("发送失败!\r\n"); }else{ printf("发送成功!\r\n"); } /* 3 接收数据, 最后一个参数表示休眠时间。-1 时表示永久休眠直到有数据为止 */ if(recv_node_data(buf, 1024, &recv_addr, -1) < 0) { printf("没有数据\r\n"); }else{ printf("接收到数据\r\n"); } } ``` #### 参与贡献 1. Fork 本项目 2. 新建 Feat_xxx 分支 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. 码云官方提供的使用手册 [http://git.mydoc.io/](http://git.mydoc.io/) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)