#include "stdafx.h"
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
#include <map>
using namespace std;
typedef struct File_Part
{
string FileSize; //文件大小
string EffectiveTime;//有效时间
int PortNum; //端口号
string IP; //IP地址
string MAC; //MAC地址
File_Part& operator = (const File_Part& p){
FileSize=p.FileSize;
EffectiveTime=p.EffectiveTime;
PortNum=p.PortNum;
IP=p.IP;
MAC=p.MAC;
return *this;
}
}part;//文件属性
typedef struct File_Client
{
string FileName;
part FileSX;
}file_infor;//文件信息
ostream& operator << (ostream& os, const File_Part& p){
os<<p.FileSize<<" "<<p.EffectiveTime<<" "<<p.PortNum<<" "<<p.IP<<" "<<p.MAC;
return os;
}
ostream& operator << (ostream& os, const File_Client& p){
os<<p.FileName<<" "<<p.FileSX;
return os;
}
int main(int argc, char* argv[])
{
//client1拥有的文件信息
part p0,p1;
p0.FileSize="5M";
p0.EffectiveTime="2013/6/5";
p0.PortNum=8080;
p0.IP="20.12.15.45";
p0.MAC="01-55-22-4-2-49";
p1.FileSize="4M";
p1.EffectiveTime="2013/6/4";
p1.PortNum=8080;
p1.IP="20.12.15.45";
p1.MAC="01-55-22-4-2-49";
file_infor* q=new file_infor[2];
q[0].FileName="喵.mp3";
q[0].FileSX=p0;
q[1].FileName="啦啦爱.mp3";
q[1].FileSX=p1;
//client2拥有的文件信息
part q0,q1,q2;
q0.FileSize="11M";
q0.EffectiveTime="2013/6/1";
q0.PortNum=8080;
q0.IP="11.17.15.67";
q0.MAC="0A-57-27-42-27-39";
q1.FileSize="4M";
q1.EffectiveTime="2013/6/2";
q1.PortNum=8080;
q1.IP="11.17.15.67";
q1.MAC="0A-57-27-42-27-39";
q2.FileSize="4M";
q2.EffectiveTime="2013/6/3";
q2.PortNum=8080;
q2.IP="11.17.15.67";
q2.MAC="0A-57-27-42-27-39";
file_infor* e=new file_infor[3];
e[0].FileName="啦啦爱.mp3";
e[0].FileSX=q0;
e[1].FileName="你好吗天气好吗.mp3";
e[1].FileSX=q1;
e[2].FileName="爱的海洋.mp3";
e[2].FileSX=q2;
//服务器端:将文件信息输入multimap中,这里假设在每个对等节点中,各个文件都是唯一的,比如:在对等节点1中不存在两个"喵.mp3"
multimap<string,part> contine;
typedef multimap<string,part>::iterator iter;
for(int j=0;j<2;j++)
{
contine.insert(make_pair(q[j].FileName,q[j].FileSX));
}
for(int w=0;w<3;w++)
{
contine.insert(make_pair(e[w].FileName,e[w].FileSX));
}
//服务器端:将收到的文件信息全部打印
iter cont_iter;
cont_iter=contine.begin();
while(cont_iter!=contine.end())
{
cout<<cont_iter->first<<" "<<cont_iter->second<<endl;
cont_iter++;
}
//服务器端:根据文件名检索文件属性,并放入client_receive容器中
string s="啦啦爱.mp3";
vector<part> client_receive;
iter output1,output2;
output1=contine.lower_bound(s);
output2=contine.upper_bound(s);
while(output1!=output2)
{
//cout<<output1->second<<endl;
client_receive.push_back(output1->second);
output1++;
}
//对等节点端:对收到的信息进行提取
vector<part>::iterator t=client_receive.begin();
while(t!=client_receive.end())
{
cout<<t->IP<<endl;
t++;
}
system("pause");
return 0;
}
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
#include <map>
using namespace std;
typedef struct File_Part
{
string FileSize; //文件大小
string EffectiveTime;//有效时间
int PortNum; //端口号
string IP; //IP地址
string MAC; //MAC地址
File_Part& operator = (const File_Part& p){
FileSize=p.FileSize;
EffectiveTime=p.EffectiveTime;
PortNum=p.PortNum;
IP=p.IP;
MAC=p.MAC;
return *this;
}
}part;//文件属性
typedef struct File_Client
{
string FileName;
part FileSX;
}file_infor;//文件信息
ostream& operator << (ostream& os, const File_Part& p){
os<<p.FileSize<<" "<<p.EffectiveTime<<" "<<p.PortNum<<" "<<p.IP<<" "<<p.MAC;
return os;
}
ostream& operator << (ostream& os, const File_Client& p){
os<<p.FileName<<" "<<p.FileSX;
return os;
}
int main(int argc, char* argv[])
{
//client1拥有的文件信息
part p0,p1;
p0.FileSize="5M";
p0.EffectiveTime="2013/6/5";
p0.PortNum=8080;
p0.IP="20.12.15.45";
p0.MAC="01-55-22-4-2-49";
p1.FileSize="4M";
p1.EffectiveTime="2013/6/4";
p1.PortNum=8080;
p1.IP="20.12.15.45";
p1.MAC="01-55-22-4-2-49";
file_infor* q=new file_infor[2];
q[0].FileName="喵.mp3";
q[0].FileSX=p0;
q[1].FileName="啦啦爱.mp3";
q[1].FileSX=p1;
//client2拥有的文件信息
part q0,q1,q2;
q0.FileSize="11M";
q0.EffectiveTime="2013/6/1";
q0.PortNum=8080;
q0.IP="11.17.15.67";
q0.MAC="0A-57-27-42-27-39";
q1.FileSize="4M";
q1.EffectiveTime="2013/6/2";
q1.PortNum=8080;
q1.IP="11.17.15.67";
q1.MAC="0A-57-27-42-27-39";
q2.FileSize="4M";
q2.EffectiveTime="2013/6/3";
q2.PortNum=8080;
q2.IP="11.17.15.67";
q2.MAC="0A-57-27-42-27-39";
file_infor* e=new file_infor[3];
e[0].FileName="啦啦爱.mp3";
e[0].FileSX=q0;
e[1].FileName="你好吗天气好吗.mp3";
e[1].FileSX=q1;
e[2].FileName="爱的海洋.mp3";
e[2].FileSX=q2;
//服务器端:将文件信息输入multimap中,这里假设在每个对等节点中,各个文件都是唯一的,比如:在对等节点1中不存在两个"喵.mp3"
multimap<string,part> contine;
typedef multimap<string,part>::iterator iter;
for(int j=0;j<2;j++)
{
contine.insert(make_pair(q[j].FileName,q[j].FileSX));
}
for(int w=0;w<3;w++)
{
contine.insert(make_pair(e[w].FileName,e[w].FileSX));
}
//服务器端:将收到的文件信息全部打印
iter cont_iter;
cont_iter=contine.begin();
while(cont_iter!=contine.end())
{
cout<<cont_iter->first<<" "<<cont_iter->second<<endl;
cont_iter++;
}
//服务器端:根据文件名检索文件属性,并放入client_receive容器中
string s="啦啦爱.mp3";
vector<part> client_receive;
iter output1,output2;
output1=contine.lower_bound(s);
output2=contine.upper_bound(s);
while(output1!=output2)
{
//cout<<output1->second<<endl;
client_receive.push_back(output1->second);
output1++;
}
//对等节点端:对收到的信息进行提取
vector<part>::iterator t=client_receive.begin();
while(t!=client_receive.end())
{
cout<<t->IP<<endl;
t++;
}
system("pause");
return 0;
}