基于P2P的n2n部署测试方法
1.获稳定版本的n2n发布,避免出现版本兼容性问题
https://github.com/ntop/n2n/releases
这里选择3.0
2.编译安装
./autogen.sh ./configure make # optionally install make install
3.开启端口号的防火墙(此处用的2222端口号)
iptables -D INPUT -p udp -m udp --dport 2222 -j ACCEPT
iptables -I INPUT -p udp -m udp --dport 2222 -j ACCEPT
iptables -D INPUT -p tcp --dport 2222 -j ACCEPT
iptables -I INPUT -p tcp --dport 2222 -j ACCEPT
4.开启supernode
supernode -p 2222&
5.开启edge
sudo edge -c haopeng -k haopeng123 -a 192.168.1.2 -f -l 112.74.171.82:2222&
sudo edge -c haopeng -k haopeng123 -a 192.168.1.3 -f -l 112.74.171.82:2222&
6.验证
192.168.1.2和192.168.1.3互ping
查看edge的虚拟通道:
edge之间简单socket测试程序:
==================================server==================================
/* File Name: server.c /
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define DEFAULT_PORT 5679
#define MAXLINE 409
int main(int argc, char* argv)
{
int socket_fd, connect_fd;
struct sockaddr_in servaddr;
char buff[4096];
int n;
//初始化Socket
if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){
printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
//初始化
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。
servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT
//将本地地址绑定到所创建的套接字上
if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){
printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
//开始监听是否有客户端连接
if( listen(socket_fd, 10) == -1){
printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
printf("======waiting for client's request======\n");
while(1){
//阻塞直到有客户端连接,不然多浪费CPU资源。
if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){
printf("accept socket error: %s(errno: %d)",strerror(errno),errno);
continue;
}
//接受客户端传过来的数据
n = recv(connect_fd, buff, MAXLINE, 0);
//向客户端发送回应数据
if(!fork()){
if(send(connect_fd, "Hello,you are connected!\n", 26,0) == -1)
perror("send error");
close(connect_fd);
exit(0);
}
buff[n] = '\0';
printf("recv msg from client: %s\n", buff);
close(connect_fd);
}
close(socket_fd);
}
//======================cli=====================
/* File Name: client.c / #include #include #include #include #include #include #include
#define MAXLINE 4096
int main(int argc, char* argv)
{
int sockfd, n,rec_len;
char recvline[4096], sendline[4096];
char buf[MAXLINE];
struct sockaddr_in servaddr;
if( argc != 2){
printf("usage: ./client \n");
exit(0);
}
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);
exit(0);
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5679);
if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr)
printf("inet_pton error for %s\n",argv[1]);
exit(0);
}
if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){
printf("connect error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
printf("send msg to server: \n");
fgets(sendline, 4096, stdin);
if( send(sockfd, sendline, strlen(sendline), 0) < 0)
{
printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
exit(0);
}
if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) {
perror("recv error");
exit(1);
}
buf[rec_len] = '\0';
printf("Received : %s ",buf);
close(sockfd);
exit(0);
}
基于P2P的n2n部署测试方法相关推荐
- ZStack实践汇 | 基于ZStack云平台部署FortiGate
2019年国际知名信息安全峰会RSA Conference在美国旧金山举行,在所有演讲主题中,云安全超过网络安全和数据安全,成为热门关键词第一.ZStack实践汇这次带来的是<基于ZStack云 ...
- 基于p2p的sip电话系统
摘要 p2p系统天生拥有高扩展性.健壮性和高容错性的特点,这些特点得益于系统没有中央服务器并且网络是自己管理的这种结构.本系统实现了在 p2p系统中较长的延迟的代价下定位感兴趣的资源.internet ...
- 实战 MDT 2012(六)---基于MAC地址的部署
转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://jqq1982.blog.51cto.com/515663/1123289 基于MAC地址的部署需要S ...
- 【基于Python+Flask项目部署系列--03】开发测试环境配置-基于Ubuntu16.04
一.开发测试环境介绍 前提已经部署完[基于Python+Flask项目部署系列--02]Ubuntu16.04服务器安装.建议部署2套环境:开发测试环境+生产环境. 这篇文章主要讲解测试环境如何配置p ...
- 基于Kubernetes的Spark部署完全指南
基于Kubernetes的Spark部署完全指南 [编者的话]本文是在Kubernets上搭建Spark集群的操作指南,同时提供了Spark测试任务及相关的测试数据,通过阅读本文,你可以实践从制作Sp ...
- 关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述
关于 WSGI.uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述 引言 最近基于 Flask Web框架在开发一个后端项目,在Web Server和 F ...
- 联盟链Quorum(基于raft共识)部署流程(三)- 部署基于Quorum链的区块链浏览器
这篇文章算得上是继联盟链Quorum(基于raft共识)部署流程(二)的续篇 我的演示系统环境时 Ubuntu 18.04 LTS. 环境要求: DockerDocker-Compose 安装方法见下 ...
- 云服务基于DevCloud的自动化部署功能,实现快速部署网站应用
[目的]本实验指导用户基于DevCloud的自动化部署功能,实现在CCE集群上快速部署网站应用. 云服务基于DevCloud的自动化部署功能,实现快速部署网站应用 1.资源准备 1.1.创建安全组.虚 ...
- 广告业务系统 之 敏捷交付 —— “基于 Docker 容器同机部署”
文章目录 广告业务系统 之 敏捷交付 -- "基于 Docker 容器同机部署" 服务 Docker 构建及部署 代码支持 服务打包&构建 服务部署 广告业务系统 之 敏捷 ...
- YaCy—基于P2P的分布式开源搜索引擎
YaCy是一个基于P2P的分布式网页搜索引擎系统,任何人都可以用YaCy为自己建立个人的搜索门户,以实现信息的自由共享.经过了长达5年的开发,YaCy团队于2011年11月发布了这个开源的.分布式搜索 ...
最新文章
- 计算机应用基础课程没有期末考试,《计算机应用基础》课程期末考试2009—2010学年第一学期.doc...
- unity热更新json_Unity热更新之AssetBundle打包篇
- linux电脑做笔记软件,知识管理工具, 自由格式数据库, 笔记软件以及个人信息管理...
- 扩展JS格式化(Format)功能及评论树
- mybatis redis_基于人事年假管理的系统springboot+mybatis+redis+拦截器
- 苹果Mac轻量级网页代码编辑器:​​​​​​​​​​​​Espresso
- Hyperledger Fabric 或 Composer的configtx.yaml配置文件解析
- python双重for循环 列表推导式_Python轻量级循环-列表推导式
- OpenCV : 仿射变换
- 易语言EXUI游戏充值系统源码
- 【安卓项目】期末大作业——“记账宝”APP开发案例
- SSD-tensorflow Windows环境下,mAP的计算
- Docker:镜像加速器
- 使用opencv读取rtsp流的图片帧进行目标检测,并将处理好的图像推到rtsp服务器上
- SpringBoot安全验证之Referer拦截器
- 吕 思 伟 ---- 潘 爱 民 :: ATL 介 绍( 三)
- ecshop小京东模板切换到smarty3.13之模板函数,用模板函数替换楼层
- 一年365天,每周5个工作日,进步1%,两个休息日退步1%,最终进步到多少
- 亲爱的老狼-opacity、rgba、transparent的应用
- 无法将“pytest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。