資源簡介
解決了超時問題,并且使用select語句

代碼片段和文件信息
#include
#include
#include
#include??
#include??
#pragma?comment(lib“Ws2_32.lib“)x
using?namespace?std;
#define?PORT?53
#define?OUT_ADDRESS?“192.168.1.1“//外部DNS服務器地址
class?local_list
{
??public:
??string?ip;
??string?domain_name;
};
class?ID_transfer_table//ID轉換表
{
??public:
??unsigned?short?old_ID;//舊ID
??SOCKADDR_IN?client;//請求者套接字地址
??int?finish;//是否完成解析
};
string?yuming;//域名
ID_transfer_table?ITT[500];//ID轉換表
local_list?*loc[500];
SYSTEMTIME?sys;
string?file_name;//本地DNStxt地址
int?YearMonthDay?Hour?Minute?Second?Milliseconds;//保存系統時間的變量
int?IDcount=0;
int?Get_list(int?t)//把dnsrelay載入結構local_list中
{
???string?s;
???char*?filename={0};
// cout<<“::“< ???//for(int?i=0;i ???//???filename[i]=file_name[i];
???//cout< ????int?n;
????n=0;
????loc[0]=new?local_list;
????ifstream?local;
//filename=file_name;
if(t?==?1)
{
//cout<<“**“< local.open(file_name.c_str());
}
else
???????local.open(“E:\dnsrelay.txt“);
if(!local)
{
cout<<“打開文件失敗!“< }
????while(!local.eof())
{?
???????local>>s;
???????loc[n]->ip=s;
???????local>>s;
???????loc[n]->domain_name=s;
???????n++;
???????loc[n]=new?local_list;
}
????local.close();
return?n-1;
}
int?GetDomname(string?rec_bufint?Rec_f)
{
????string?s;
int?ijn;
j=0;
yuming=““;
i=0;
s=rec_buf.substr(12Rec_f-16);
????while(i {
???if(s[i]>0&&s[i]<=63)
???{
???n=s[i];
???????i++;
???while(n!=0)
???{??
??????yuming+=s[i];
??j++;
??i++;
??n--;
???}
???}
???if(s[i]!=0)
???{
???????yuming+=‘.‘;
???j++;
???}
}
yuming+=‘\0‘;
return?j;
}
string?local_find(int?num)
{
????
????int?i;
????for(i=0;i {
???????if(strcmp(yuming.c_str()loc[i]->domain_name.c_str())==0)
???{
??????if(loc[i]->ip==“0.0.0.0“)
??{
??return?“0.0.0.0“;
??}
??????
??????else
??{
??????????return?loc[i]->ip;?
??}
?????????
???}
????}
????if(i==num)
{
???????return?“notfind“;//中繼
}
}
int?main(int?argc?char**?argv)?
{
????WSADATA?wsaData;//初始化動態鏈接庫用的,之后socket才能用
????SOCKET?SERVERHOST;//本地DNS和外部DNS兩個套接字
????SOCKADDR_IN?s_nameh_namec_name;//本地DNS、外部DNS、請求端三網絡套接字地址
char?sen_buf[512];//發緩存
????char?rec_buf[512];//收緩存
????string?out_add;//外部DNS地址
????int?numj;
????if(argc?==?1)
{
cout<<“無調試信息輸出“< ??out_add=OUT_ADDRESS;
??num?=?Get_list(2);
}
????
else?if(argc?==?4)
{
???cout<<“調試信息級別1“< ??? ???out_add=argv[2];
???????file_name=argv[3];
???cout< ???num?=?Get_list(1);
}
else?if(argc?==?3)
{
???cout<<“調試信息級別2“< ???????out_add=argv[2];
???num?=?Get_list(2);
}
????//
//
//初始化ID轉換表
//
//
WSAStartup(MAKEWORD(22)?&wsaData); //初始化ws2_32.dll動態鏈接庫。第一個2表示副版本號,第二個號表示主版本號,第二個參數返回請求socket的版本信息
//創建套接字:
SERVER=socket(AF
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-05-30?19:46??dns\
?????目錄???????????0??2015-05-30?19:39??dns\Debug\
?????文件??????577593??2015-05-30?19:39??dns\Debug\dne.exe
?????文件??????833664??2015-05-30?19:39??dns\Debug\dne.ilk
?????文件??????320637??2015-05-30?19:39??dns\Debug\dne.obj
?????文件?????5567096??2015-05-30?19:10??dns\Debug\dne.pch
?????文件?????1139712??2015-05-30?19:39??dns\Debug\dne.pdb
?????文件????????5176??2015-05-18?20:41??dns\Debug\dnsrelay.txt
?????文件??????181248??2015-05-30?19:39??dns\Debug\vc60.idb
?????文件??????143360??2015-05-30?19:39??dns\Debug\vc60.pdb
?????文件???????11714??2015-05-30?19:39??dns\dne.cpp
?????文件????????3365??2015-05-30?19:10??dns\dne.dsp
?????文件?????????514??2015-05-30?19:46??dns\dne.dsw
?????文件???????41984??2015-05-30?19:46??dns\dne.ncb
?????文件???????48640??2015-05-30?19:46??dns\dne.opt
?????文件?????????737??2015-05-30?19:39??dns\dne.plg
?????文件????????5176??2015-05-18?20:41??dns\dnsrelay.txt
- 上一篇:機構分析與綜合大作業-ADAMS建模仿真
- 下一篇:遞歸解決迷宮問題
評論
共有 條評論