亚洲色成人网站www永久,亚洲欧美人成视频一区在线,亚洲国产成人高清在线观看,亚洲精品久久久久久动漫,亚洲国产精品久久电影欧美

數(shù)據(jù)專欄

智能大數(shù)據(jù)搬運工,你想要的我們都有

科技資訊

科技學(xué)院

科技百科

科技書籍

網(wǎng)站大全

軟件大全

HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
#include
#include
struct Node
{
float coef;
int expn;
struct Node *next;
};
typedef struct Node ListNode;
typedef struct Node* LinkNode;
/*創(chuàng)建單鏈表*/
ListNode *CreatList(int n)
{
ListNode *head;
ListNode *p,*pre;
int i,expn;float coef;

head=(ListNode *)malloc(sizeof(ListNode));//為頭節(jié)點分配內(nèi)存空間
head->next=NULL;//將頭結(jié)點的指針域清空
pre=head;//先將頭結(jié)點首地址賦給中間變量pre
for(i=1;i<=n;i++)//通過for循環(huán)不斷加入新的結(jié)點
{
p=(ListNode *)malloc(sizeof(ListNode));//為要插入的節(jié)點分配
//內(nèi)存空間p指向新插入結(jié)點的首地址
p->expn=expn;
p->coef=coef;
pre->next=p;//將p指向新結(jié)點插入鏈表也就是頭結(jié)點指針域指向下個結(jié)點
pre=p;//這個起著指向下一個結(jié)點的作用
}
p->next=NULL;//最后將最后一個結(jié)點的指針域清空了
return head;//返回這個鏈表的首地址
}
/*插入節(jié)點*/
int InsertList(ListNode *h,int i,float coef,int expn)
{
int j=0;
ListNode *p; ListNode *s;
p=h; p=p->next;
while(p&&j {
p=p->next;
++j;
}
if(!p||j>i-1) return 0;
// s=(ListNode *)malloc(sizeof(ListNode));

p->expn=expn;
p->coef=coef;

// s->next=p->next;
// p->next=s;
return 1;
}
/*打印鏈表*/
void PrintListNode(ListNode *m){
ListNode *p;
p=m->next;
for(;p!=NULL;){
printf("%.1fX^%d",p->coef,p->expn);
if(p->next!=NULL)
printf("+");
p=p->next;
}
printf("\n");
}
/*多項式相加*/
void AddList(ListNode *h,ListNode *H,ListNode *h1){
ListNode *pa,*pb,*pc;
pa=h,pb=H,pc=h1;

for(int i=1;pa->next==NULL&&pb->next==NULL;pa=pa->next,pb=pb->next)
{
pc->coef=pa->coef ;
pc->expn=pa->expn;
InsertList(pc,i,pc->coef,pc->expn);
pc=pc->next;
i++;
pc->coef=pb->coef ;
pc->expn=pb->expn;
InsertList(pc,i,pc->coef,pc->expn);
pc=pc->next;
i++;
}
int main()
{
ListNode *h;//h指向結(jié)構(gòu)體NODE
int n=3, expn,coef;

h=CreatList(n);/*創(chuàng)建鏈表*/
coef=2;expn=1;
InsertList(h,1,coef,expn);//插入鏈表
coef=2;expn=5;
InsertList(h,2,coef,expn);
coef=3;expn=4;
InsertList(h,3,coef,expn);
printf("L1=");
PrintListNode(h);

ListNode *H;//h指向結(jié)構(gòu)體NODE

H=CreatList(n);/*創(chuàng)建鏈表*/
coef=2;expn=10;
InsertList(H,1,coef,expn);//插入鏈表
coef=8;expn=5;
InsertList(H,2,coef,expn);
coef=9;expn=1;
InsertList(H,3,coef,expn);
printf("L2=");
PrintListNode(H);

ListNode *L;
n=6;
L=CreatList(n);
AddList(h,H,L);
}

技術(shù)問答
2018-11-07 10:25:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
我是按照。https://www.cnblogs.com/lanxuezaipiao/p/3635556.html 上的做的。
本地windows沒有C++ 的dll文件,測試不了,想寫個簡單的類,看看能不能調(diào)用C++ 的代碼。
下載了第三方的JNA-4.1.0 jar包 ,寫了個Demo.java . import com.sun.jna.Library; import com.sun.jna.Native; public class Demo { public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary("demo.so", CLibrary.class); boolean compare(String key,String value); } public static void main(String[] args) { boolean flag = CLibrary.INSTANCE.compare("100","200"); System.out.println(flag); } }
.so文件 .h文件 .class 文件 .java 文件 都在 /home/tmp 文件夾下。
編譯是 javac -cp jna-4.1.0.jar Demo.java
執(zhí)行 : java -cp jna-4.1.0.jar Demo 報錯: 錯誤: 找不到或者無法加載主類 Demo
執(zhí)行: java Demo 報錯 :E xception int thread "main" .... NoClassDefFoundError : com/sun/jna/Library
請問下大神 該怎么解決。
技術(shù)問答
2018-10-30 14:54:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
最近折騰JS ,發(fā)現(xiàn)nodejs 和C++ 通信的接口有一套,cocosJS 和C++ 通信有一套JSB,所以想問下,JS 與C++有沒有標(biāo)準(zhǔn)的通信接口。
技術(shù)問答
2017-04-06 10:23:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
我想知道大家平時在工作中都用C或者C++ 做些什么?
技術(shù)問答
2016-12-21 13:48:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
求一個Dev c++的 zlib.dll 文件 謝謝
技術(shù)問答
2017-02-20 21:04:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
給定4張撲克牌,【1-10】;
用加減乘除計算出24 #include #include #include #include //#include #include #include using namespace std; string rand_op() { int n=int(rand()/double(RAND_MAX)*4);//[0,1] //0-1,1-2,2-3,3-4 //cout<stk; /*測試注釋 for(int j=0;j<7;j++) { stk.push(ss[j]); cout<stk; for(int i=0;i<7;i++) { if(ss[i]=="+" || ss[i]=="-" || ss[i]=="*" || ss[i]=="/" ){ string str1=stk.top(); stk.pop(); string str2=stk.top(); stk.pop(); stk.push("(" +str1+ss[i]+str2+" )"); }else{ stk.push(ss[i]); } } } void f(string* ss) { //隨機產(chǎn)生組合序列,計算結(jié)果為24返回結(jié)果 //逆波蘭表達(dá)式 for(int k=0;k<10;k++) { int i; string* buf=new string[7]; for( i=0;i<4;i++) buf[i]=ss[i]; for( i=4;i<7;i++) buf[i]=rand_op(); shuffle(buf);//洗牌,不能用next_permutation //char ch; //ch=getchar(); if(ji_suan(buf)==1){ cout<<"ok"<>x[i]; } f(x); } return 0; }
技術(shù)問答
2017-02-05 22:43:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>

主要看高亮部分,我直接這么寫
s+=((s*100000000/1)%10)>4?0.0000001:0.0;
出錯了, 然后我
int flag=s*100000000/1 ;
用flag代替后就對了,為僧膜嘞?
如下圖。





技術(shù)問答
2017-01-19 14:23:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
您好,有一道特別簡單的題目,要求做一個學(xué)生管理系統(tǒng),具有以下功能
1.查詢學(xué)生信息
2.添加學(xué)生信息
3.修改學(xué)生信息
4.刪除學(xué)生信息
5.實現(xiàn)信息的文件存儲 這個題目麻煩您了,雖然簡單但是挺急用的麻煩耽誤您幾分鐘,不勝感激!!
技術(shù)問答
2016-11-22 13:30:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> //seqstack2.h #define TRUE 1 #define FALSE 0 #define Stack_Size 50 /*順序棧-整型*/ typedef struct { int elem[Stack_Size]; /*用來存放棧中元素的一維數(shù)組*/ int top; /*用來存放棧頂元素的下標(biāo),top為-1表示棧是空棧*/ }nStack; /*初始化*/ void nInitStack(nStack *S) { /*構(gòu)造一個空棧S*/ S->top=-1; } /*判???/ int nIsEmpty(nStack *S) /*判斷棧S為空棧時返回值為真,反之為假*/ { return(S->top==-1?TRUE:FALSE); } /*判棧滿*/ int nIsFull(nStack *S) /*判斷棧S為滿棧時返回值為真,反之為假*/ { return(S->top==Stack_Size-1?TRUE:FALSE); } int nPush(nStack * S, int x) { if(S->top== Stack_Size-1) return(FALSE); /*棧已滿*/ S->top++; S->elem[S->top]=x; return(TRUE); } int nPop(nStack * S, int *x) { /* 將棧S的棧頂元素彈出,放到x所指的存儲空間中 */ if(S->top==-1) /*棧為空*/ return(FALSE); else { *x= S->elem[S->top]; S->top--; /* 修改棧頂指針 */ return(TRUE); } } int nGetTop(nStack *S, int *x) { /* 將棧S的棧頂元素彈出,放到x所指的存儲空間中,但棧頂指針保持不變 */ if(S->top==-1) /*棧為空*/ return(FALSE); else { *x = S->elem[S->top]; return(TRUE); } } /*順序棧-字符型*/ typedef struct { char elem[Stack_Size]; /*用來存放棧中元素的一維數(shù)組*/ int top; /*用來存放棧頂元素的下標(biāo),top為-1表示棧是空棧*/ }strStack; /*初始化*/ void strInitStack(strStack *S) { /*構(gòu)造一個空棧S*/ S->top=-1; } /*判???/ int strIsEmpty(strStack *S) /*判斷棧S為空棧時返回值為真,反之為假*/ { return(S->top==-1?TRUE:FALSE); } /*判棧滿*/ int strIsFull(strStack *S) /*判斷棧S為滿棧時返回值為真,反之為假*/ { return(S->top==Stack_Size-1?TRUE:FALSE); } char strPush(strStack * S, char x) { if(S->top== Stack_Size-1) return(FALSE); /*棧已滿*/ S->top++; S->elem[S->top]=x; return(TRUE); } char strPop(strStack * S, char *x) { /* 將棧S的棧頂元素彈出,放到x所指的存儲空間中 */ if(S->top==-1) /*棧為空*/ return(FALSE); else { *x= S->elem[S->top]; S->top--; /* 修改棧頂指針 */ return(TRUE); } } int strGetTop(strStack *S, char *x) { /* 將棧S的棧頂元素彈出,放到x所指的存儲空間中,但棧頂指針保持不變 */ if(S->top==-1) /*棧為空*/ return(FALSE); else { *x = S->elem[S->top]; return(TRUE); } } /*功能函數(shù)*/ int Match(char ch,char str) { if(ch=='('&&str==')') { return TRUE; } else if(ch=='['&&str==']') { return TRUE; } else if(ch=='{'&&str=='}') { return TRUE; } else return FALSE; } int In(char ch) { if(ch=='+') { return TRUE; } else if(ch=='-') { return TRUE; } else if(ch=='*') { return TRUE; } else if(ch=='/') { return TRUE; } else if(ch=='(') { return TRUE; } else if(ch==')') { return TRUE; } else if(ch=='#') { return TRUE; } else return FALSE; } char Compare(char x,char ch)//..... { switch(x) { case '+': case '-': if(ch=='+'||ch=='-') return '='; if(ch=='*'||ch=='/') return '>'; if(ch=='#') return '<'; case '*': case '/': if(ch=='+'||ch=='-') return '<'; if(ch=='*'||ch=='/') return '='; if(ch=='#') return '>'; } } int Execute(int a,char op,int b) { switch(op) { case '+': return (a+b); break; case '-': return (a-b); break; case '*': return (a*b); break; case '/': return (a/b); break; }
}
***************
#include "seqstack2.h"
#include "stdio.h"
#include
char ch;
int ExpEvaluation()/*讀入一個簡單算術(shù)表達(dá)式并計算其值。operatsign和operatdata分別為運算符棧和運算數(shù)棧,OPS為運算符集合*/
{
char x,y;
char op;
int a,b,v;
nStack operatdata;
strStack operatsign;
nInitStack(&operatdata);
strInitStack(&operatsign);
strPush(&operatsign,'#');
printf("\nPlease input an expression (Ending with #) :\n");
ch=getchar();


strGetTop(&operatsign,&y);
while(ch!='#'||y!='#') /* strGetTop()通過函數(shù)值返回棧頂元素*/
{
if(!In(ch)) /*不是運算符,是運算數(shù)*/
{
int temp; /*存放數(shù)字的臨時變量*/
temp=ch-'0';
/*將字符轉(zhuǎn)換為十進(jìn)制數(shù)*/
fflush(stdin);
ch=getchar();
while(!In(ch)) //用ch逐個讀入運算數(shù)的各位數(shù)碼,并轉(zhuǎn)化為十進(jìn)制數(shù)temp
{
temp=temp*10+ch-'0'; // 將逐個讀入運算數(shù)的各位轉(zhuǎn)化為十進(jìn)制數(shù)
fflush(stdin);
ch=getchar();
}
nPush(&operatdata,temp);
}
else
switch(Compare(y,ch))
{
case '>':
strPush(&operatsign,ch);
fflush(stdin);
ch=getchar();
break;
case '=': //小于和對于的情況
case '<':
strPop(&operatsign,&op);
nPop(&operatdata,&b);
nPop(&operatdata,&a);
v=Execute(a,op,b); /* 對a和b進(jìn)行op運算 */
nPush(&operatdata,v);
break;
}
strGetTop(&operatsign,&y);
}
nGetTop(&operatdata,&v);
return (v);
}
void main()
{
int result;
result=ExpEvaluation();
printf("\n%d",result);
}
//表達(dá)式寫完后不會有輸出結(jié)果
技術(shù)問答
2016-11-01 17:57:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> #include #include #define TRUE 1 #define FALSE 0 typedef struct Node{ int data;//數(shù)據(jù)域 struct Node *next;//指針域 }LinkQueueNode; typedef struct { LinkQueueNode *front; LinkQueueNode *rear; }LinkQueue; LinkQueue* InitQueue() { LinkQueue *Q; // Q=(LinkQueue*)malloc(sizeof(LinkQueue)); Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode)); Q->rear=Q->front; Q->front->next=NULL; return Q; } int EnterQueue(LinkQueue *Q,int x) { /* 將數(shù)據(jù)元素x插入到隊列Q中 */ LinkQueueNode *NewNode; NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode)); if(NewNode!=NULL) { NewNode->data=x; NewNode->next=NULL; Q->rear->next=NewNode; Q->rear=NewNode; return (TRUE); } else return (FALSE); /* 溢出!*/ } int DeleteQueue(LinkQueue *Q,int *x) { /* 將隊列Q的隊頭元素出隊,并存放到x所指的存儲空間中 */ LinkQueueNode *p; if(Q->front==Q->rear) return(FALSE); p=Q->front->next; Q->front->next=p->next; /* 隊頭元素p出隊 */ if(Q->rear==p) /* 如果隊中只有一個元素p,則p出隊后成為空隊 */ Q->rear=Q->front; *x=p->data; free(p); /* 釋放存儲空間 */ return(TRUE);
}
int main(){
LinkQueue *A=InitQueue();
LinkQueue *B=InitQueue();

EnterQueue(A,1);
EnterQueue(A,2);

EnterQueue(B,3);
EnterQueue(B,4);

int a,e;
DeleteQueue(B,&a);
printf("%d ",a);
DeleteQueue(A,&e);
printf("%d ",e);
return 0;
}
//結(jié)果應(yīng)該是3 1,但是確實1 2 所以我推測 A ,B是一樣的搞不懂,求解。
技術(shù)問答
2016-10-26 17:26:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
一個給數(shù)組排序,并且尋找數(shù)組內(nèi)部數(shù)字的程序。
#include void sort(int a[],int n); void halfsearch(int a[],int n); int main() { int a[100],i,n; printf("please enter numbers[1-100]:"); scanf("%d",n); for(i=0;ia[j]){ tra=a[j]; a[j]=a[i]; a[i]=tra; } } } printf("\nthe sort number are:"); for(i=0;i

技術(shù)問答
2016-10-20 21:38:01
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
單鏈表的存儲結(jié)構(gòu):
typedef struct NOde
{ ElemType data;
struct Node *next;
}Node,*LinkList;
//初始化
void InitList (Linklist L)
{ L =(Linklist)malloc(sizeof(Node));
L->next=NULL;
}//這樣寫為什么不可以呢
//void insert(Linklist L){ ... ... }//插入是可以的


技術(shù)問答
2016-09-27 18:15:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
#include #include #include main() { int bingo,num; char ch='y'; srand((unsigned)time(NULL)); while(ch=='y') { bingo = rand()%89+10; printf("-------%d--------\n",bingo); while(num!=bingo) { scanf("%d",&num); if(num>bingo) printf("猜大了!\n"); else if(num

技術(shù)問答
2016-09-25 09:51:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 用IOS殼訪問我們的wap網(wǎng)站,是通過鏈接而不是把頁面寫入WWW 現(xiàn)在 的情況是,進(jìn)去的第一個鏈接在殼里面,然后后面的只要是a標(biāo)簽一點擊就會跳出到瀏覽器,設(shè)置了白名單,android下都沒有問題,IOS就是不行。
技術(shù)問答
2016-04-06 10:58:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
請教諸位一個問題,最近需要使用到哦Boost庫,在Windows10上使用MinGW編譯時遇到一個提示函數(shù)未定義的問題,看上去像是沒有引用到MinGW系統(tǒng)函數(shù)庫,請教一下,各位有沒有遇到過類似的問題,如何解決,謝謝。
我的編譯步驟如下:
1、部署Mingw,控制臺下輸入gcc -v命令能夠正確顯示版本信息。
2、解壓Boost,并在解壓目錄下執(zhí)行bootstrap gcc命令,執(zhí)行結(jié)果如圖,顯示為找不到函數(shù)UnregisterWait和RegisterWaitForSingleObject的定義。
如果有知道的還請不吝賜教,謝謝。
技術(shù)問答
2018-06-07 21:47:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
最近真的在糾結(jié)到底要不要學(xué)一下Boost,一直在看網(wǎng)上說它怎么強大怎么好,但是一個配置真的好麻煩。不知道現(xiàn)在有多少C++應(yīng)用程序會用到Boost。
技術(shù)問答
2012-11-30 16:03:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 新手。請問怎么找到boost filesystem.hpp。
技術(shù)問答
2016-08-18 10:55:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> Setting the global locale has bad side effects. Consider following code:
int main() { std::locale::global(std::locale( "" )); // Set system's default locale as global std::ofstream csv( "test.csv" ); csv << 1.1 << "," << 1.3 << std::endl; }
What would be the content of test.csv ? It may be "1.1,1.3" or it may be "1,1,1,3" rather than what you had expected.

能幫我解釋一下這段話嗎?為什么可能出現(xiàn)這兩種情況呢?
技術(shù)問答
2013-01-20 20:46:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
我想將boost log 庫源代碼嵌入到我的工程中,需要添加哪些預(yù)定義宏?
之前我將boost date_time 庫源代碼嵌入到工程中,添加了 BOOST_DATE_TIME_SOURCE 和 BOOST_DATE_TIME_NO_LIB 兩個宏
將 boost system 庫嵌入到工程中,添加了 BOOST_SYSTEM_NO_LIB 這一個預(yù)定義宏。
現(xiàn)在我想將boost log 庫源代碼嵌入到我的工程中,添加了BOOST_LOG_NO_LIB 宏,但是編譯時提示錯誤:
In file included from /mnt/hgfs/work/appsrv_boost_log/third/include/boost/system/config.hpp:14:0, from /mnt/hgfs/work/appsrv_boost_log/third/include/boost/system/error_code.hpp:14, from /mnt/hgfs/work/appsrv_boost_log/third/include/boost/system/system_error.hpp:14, from /usr/include/boost/filesystem/path.hpp:21, from /mnt/hgfs/work/appsrv_boost_log/middle/boost_src/log/core.cpp:23: /mnt/hgfs/work/appsrv_boost_log/third/include/boost/system/api_config.hpp:28:5: error: #error user defined BOOST_POSIX_API or BOOST_WINDOWS_API not supported make[2]: *** [middle/boost_src/CMakeFiles/boost_src.dir/log/core.cpp.o] Error 1 make[1]: *** [middle/boost_src/CMakeFiles/boost_src.dir/all] Error 2 make: *** [all] Error 2


我估計是預(yù)定義宏添加不正確造成的,有可能是之前的宏未完全添加正確,也許是現(xiàn)在的這個宏還不夠。
所以想問下,有沒有人做過,你是怎么做的?
技術(shù)問答
2016-05-25 16:28:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
我自己寫了一下測試代碼發(fā)現(xiàn),如果A進(jìn)程正在偵聽連接,B進(jìn)程是無法接收到新連接的
只有把A進(jìn)程退出以后B進(jìn)程才能工作起來
有什么辦法可以讓AB進(jìn)程隨機的接收到新的socket連接,一起工作?
技術(shù)問答
2016-04-06 18:24:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
函數(shù)是被我用boost::function包裝后的, 所以沒法傳遞引用, 只能傳值.
為了在函數(shù)內(nèi)改變參數(shù)的值, 我只能這樣定義參數(shù):
void fun_x( boost::shared_ptr> param_a)
也就是一個指向智能指針的智能指針, 但這樣寫看起來很丑.
大家遇到這種情況是怎樣處理的
技術(shù)問答
2016-02-17 16:46:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 安裝boost的途中出現(xiàn)了問題。我找不到y(tǒng)yacc.c文件,應(yīng)該怎么解決這個問題。
技術(shù)問答
2015-10-12 22:50:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
codeblocks 中如何配置Qt和wxWidgets
boost c++ 怎么聯(lián)系起來
技術(shù)問答
2012-06-23 11:56:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 為什么我編譯的boost在小米三星等armeabi-v7a架構(gòu)硬件能正常運行,到海思armeabi-v8a就會crash?
arm v 8 不是向下兼容v7嗎,crash海思處理器型號為hi3751-v600,系統(tǒng)為android 5.1.1 TV版
使用的交叉工具鏈?zhǔn)莕dk-r10c中的4.8版本
技術(shù)問答
2015-07-31 11:21:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 如何使用boost::asio寫一個UDP的異步回調(diào)非阻塞的客戶端端啊?官方庫中只有服務(wù)器的代碼例子?
技術(shù)問答
2015-08-06 19:10:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
不會是因為vs2013不支持noexcept吧?
這個不會是因為不支持constexptr
但是這個不知道是什么原因。
如果前面兩個確實是因為那樣的話,不是說VS2013基本不能使用boost了,只要涉及到那兩個就全部掛掉。。
技術(shù)問答
2015-03-16 07:49:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
項目地址:https://github.com/lucklove/shttpd
該框架是基于asio實現(xiàn)的一個異步http服務(wù)端框架,目前支持http(1.0/1.1)和https
目前僅在linux(gcc4.9 clang3.6)下測試通過,若在其他平臺出現(xiàn)問題請?zhí)峤灰粋€issue或聯(lián)系QQ:1041324091
技術(shù)問答
2015-03-30 21:52:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 原本準(zhǔn)本編譯個Boost 1.53用,和以前一樣,喜歡用STLport,不過發(fā)現(xiàn)STLport 5.2.1不支持C++ 11里面的內(nèi)置類型nullptr以及nullptr_t,導(dǎo)致Boost 1.53用STLport編譯失敗了,怎么辦?去Sourceforge上Git一個最新的回來,源碼里看到的確是有nullptr以及nullptr_t的定義了,但發(fā)現(xiàn)和Stable Release不一樣啊,Windows下MSVC怎么都編譯不過去,看了看版本號是STLport 6.0.0,目錄里也不再有build/lib這個子目錄。求大神給一個能編譯過去的支持C++ 11的STLport吧。編譯方法也行啊。
技術(shù)問答
2013-02-18 22:45:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 1,剛開始學(xué)習(xí)使用CGAL,主要用到了Boost庫,使用VS2012建了一個MFC項目,添加include如下:#include #include #include // #include #include #include #include #include //#include #include #include #include #include
運行時出現(xiàn)如下錯誤: 錯誤 2 error C2064: 項不會計算為接受 2 個參數(shù)的函數(shù) d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 33 1 app2 錯誤 3 error C2064: 項不會計算為接受 2 個參數(shù)的函數(shù) d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 44 1 app2 錯誤 4 error C2064: 項不會計算為接受 2 個參數(shù)的函數(shù) d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 55 1 app2 錯誤 5 error C2064: 項不會計算為接受 2 個參數(shù)的函數(shù) d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 67 1 app2 錯誤 7 error C2059: 語法錯誤:“]” d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 67 1 app2 錯誤 8 error C2059: 語法錯誤:“)” d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 69 1 app2 錯誤 9 error C2649: “typename”: 不是“class” d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 70 1 app2 錯誤 10 error C2649: “typename”: 不是“class” d:\boost\boost_1_54_0\boost\type_traits\has_new_operator.hpp 73 1 app2 //has_new_operator.hpp namespace detail { template struct test; template struct has_new_operator_impl { template static type_traits::yes_type check_sig1( U*, test< void *(*)(std::size_t), &U::operator new //項不能計算為接受兩個參數(shù)的函數(shù) >* = NULL );



但是當(dāng)我把把關(guān)于Surface_mesh_simplification的include注釋掉之后就不會報錯了,如下:
#include #include #include // //#include //#include //#include //#include //#include //#include #include #include #include #include
求解?
2,CGAL讀的是OFF格式的文件(ASCII或者Binary),但是為什么我用Maya生成的obj文件轉(zhuǎn)化成off格式的文件之后為什么CGAL不能計算?
參考代碼如下(obj-->off): using namespace std; // TODO: 在此添加命令處理程序代碼 //::MessageBox(NULL,_T("讀取成功"),_T("標(biāo)題"),MB_OK); CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)_T("obj files|*.obj||")); CString filePathAll; CString filePath; long int countPoint; long int countFace; countPoint = 0; countFace = 0; if(dlg.DoModal()==IDOK) { filePathAll = dlg.GetPathName(); int pos = filePathAll.ReverseFind('\\'); filePath = filePathAll.Mid(0,pos); filePath += "\\"; CString fileTitle = dlg.GetFileTitle(); char *cfilePathAllCopy = (LPSTR)(LPCTSTR)filePathAll; //memset(cfilePathAllCopy,0,sizeof(cfilePathAllCopy)); char *cfilePathAll = cfilePathAllCopy; CStdioFile sFile; CString *pointALLCopy = new CString[300000]; CString *faceALLCopy = new CString[300000]; //memset(pointALLCopy,0,300000); //memset(faceALLCopy,0,300000); CString *pointALL = pointALLCopy; CString *faceALL = faceALLCopy; int positionPre = 0; int positionPos; if(sFile.Open((LPCTSTR)cfilePathAll,CFile::modeReadWrite | CFile::typeText )) { CString filePart = (CString)(" "); CString sSpace =_T( " "); //CString men; while(sFile.ReadString(filePart)) { if(filePart != "") { if(filePart.GetAt(0) == 'v' && filePart.GetAt(1) == ' ') { pointALL[countPoint] = filePart.Mid(2); countPoint ++ ; } if(filePart.GetAt(0) == 'f' && filePart.GetAt(1) == ' ') { //if(i != 0) i=0; //if(j%31 == 0) //{ CString bufferFace; positionPre = 0; for(int i = 0;i < 3;i++) { positionPre = filePart.Find(' ',positionPre) + 1; positionPos = filePart.Find('/',positionPre); bufferFace = filePart.Mid(positionPre , positionPos - positionPre); bufferFace.TrimLeft(); bufferFace.TrimRight(); char *cFace = new char[bufferFace.GetLength()]; for(int j = 0;j"); CString sOff =_T( "OFF"); CString sSpace =_T( " "); if(IDOK == dlgOFF.DoModal()) { filePathAllOFF = dlgOFF.GetPathName(); int posOFF = filePathAllOFF.ReverseFind('\\'); filePathOFF = filePathAllOFF.Mid(0,posOFF); filePathOFF += "\\"; CString fileNameOFF = dlgOFF.GetFileName(); filePathOFF += fileNameOFF; ////二進(jìn)制寫入文件 ofstream file; file.open(filePathOFF,ios_base::out|ios_base::binary|ios::badbit); if(file.is_open()) { for(int i = 0;i
技術(shù)問答
2014-07-27 09:19:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 在用async_read接收客戶端消息的時候,用tcpdum可以看到ACK顯示服務(wù)端全部接收,為何打印的時候發(fā)現(xiàn)丟掉了,比如說一條消息重復(fù)連續(xù)發(fā)5次只能收到一次,async_read_some卻不會,請告訴解答
技術(shù)問答
2014-08-06 21:04:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 請問如何用vs2013或eclipse構(gòu)建一個c++,boost項目,
技術(shù)問答
2014-07-05 17:30:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
1、47 error LNK2019: 無法解析的外部符號 __InterlockedDecrement ,該符號在函數(shù) "public: void __thiscall boost::detail::sp_counted_base::release(void)" ( ?release@sp_counted_base @detail @boost@@QAEXXZ) 中被引用

2、47 fatal error LNK1104: 無法打開文件“l(fā)ibboost_thread-vc71-mt-sgd-1_55.lib”
出現(xiàn)的問題分別如上所示......請大神回答則個
技術(shù)問答
2014-06-18 15:21:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
很多很多時候, 我們都需要用到http協(xié)議, 而在c/c++中, 好用的開源http開發(fā)庫大概沒幾個, 比較全面的就 屬curl了, 我相信這個庫很多人都使用過, 不過它的api接口在我看來并不友好, 繁瑣和難以理解的選項非常之多, 并且關(guān)鍵一點, 不支持異步!
所以, 要 使用curl 只能開線程! 不用我說, 線程顯然是一種昂貴的資源, 過多的線程會導(dǎo)致cpu頻繁的切換線程上下文而不是干實事, 這個代價是很大的. 這也正是異步的好處之一, 可以避免過多的線程.
異步在當(dāng)前很多應(yīng)用的需求當(dāng)中, 異步幾乎必備的特性了, 好吧, 終于有一個 叫node.js的家伙出現(xiàn)了, 并且可 以很好的支持異步, 但畢竟在c++開發(fā)環(huán)境下, 若為了http這樣的功能而引 入它的話, 似乎有點小題大作了, 而且node.js是通過腳本來執(zhí)行的, 這必將使得效率下降.
這真是太糟糕了!
我是一個有代碼潔癖的人, 顯然最看不得到處飛線程這種事, 由其是僅僅為了下載一點點數(shù)據(jù), 就飛一個線 程, 我 是最接受不了的. 在許多群友的鼓勵下, 我終于開始了avhttp項目的開發(fā), 并設(shè)定了最初的一個目標(biāo),那就是:
一. 開源!!! 并使用boost授權(quán)( http://www.boost.org/LICENSE_1_0.txt )作為開源協(xié)議.
二. 支持http/1.0協(xié)議.
三. 支持http/1.1協(xié)議, 其中包括chunked支持, gzi壓縮等支持.
四. 支持代理, 包括socks4/socks5/http代理( 天朝必備 ).
五. 異步支持, 基于asio, 可以獲得良好的異步支持.
六. 并發(fā)下載, 斷點續(xù)傳, 這一塊是在基于上面5點的基礎(chǔ)上的.
七. 簡單易用的接口.
經(jīng)過持續(xù)的開發(fā)一直到今天, 總算把這個目標(biāo)實現(xiàn)了.
詳細(xì)見: http://www.oschina.net/p/avhttp 或直接 https://github.com/avplayer/avhttp
當(dāng)前編譯測試狀態(tài)
感嘆: 開源真是累啊! 沒啥好處活受罪! 所以, 拋磚還請輕點.


技術(shù)問答
2013-05-12 00:04:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
描述:
我用的 boost::regex_match()來比較傳入字符串,我傳入要查找的字符串是“中”,然后要和“手心手背”字符串比較,結(jié)果匹配成功。
原因:
中文字符占2個字節(jié),匹配時,把前個字符的后半部分與前個字符的前半部分,組成了查找字符的16進(jìn)制代碼,如:“手心”字符在內(nèi)存中的16進(jìn)制為“ca d6 d0 c4”,而“中”字符在內(nèi)存中的16進(jìn)制為“d6 d0”,所以用 boost::regex_match()來比較“手心手背”里面是否包含“中”返回true。
請問,怎樣解決這個問題呢?
剛接觸boost,問的問題,比較幼稚,希望大俠不惜賜教,謝謝??!
技術(shù)問答
2014-05-10 17:27:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
Ubuntu 14.04 Server上有Squid 代理和Web服務(wù),網(wǎng)絡(luò)連接數(shù)一上來Web服務(wù)和Squid就開始各種timeout和connection refused。但服務(wù)器內(nèi)存、CPU、帶寬等資源都很充足,這是啥原因呢?
附:
netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
LAST_ACK 310
SYN_RECV 56
CLOSE_WAIT 69
ESTABLISHED 2143
FIN_WAIT1 1202
FIN_WAIT2 59
CLOSING 555
SYN_SENT 1557
TIME_WAIT 2942
技術(shù)問答
2016-01-08 09:27:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
官方文檔 http://www.squid-cache.org/Versions/v3/3.1/cfgman/acl.html
acl aclname maxconn number # This will be matched when the client's IP address has # more than TCP connections established. [fast] # NOTE: This only measures direct TCP links so X-Forwarded-For # indirect clients are not counted. 這里是對單一ip限制總連接數(shù)

acl conn_limit maxconn 10
acl limit_ip 192.168.3.0/24
http_access deny limit_ip conn_limit
請問:
上面寫法 是限制192.168.3.0/24中 每個ip 最大連接10,還是192.168.3.0/24 所有ip 最大連接數(shù)10


技術(shù)問答
2015-08-14 18:14:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
現(xiàn)狀
現(xiàn)在我們集團利用squid為多個網(wǎng)站做反向代理,如:a.com和b.com,現(xiàn)在我們想將集體的多個網(wǎng)站實現(xiàn)HTTPS
問題:
現(xiàn)在我的配置如下:
https_port 443 cert=/etc/squid/server/ssl/server.crt key=/etc/squid/server/ssl/server.key defaultsite=a.com
現(xiàn)在只能實現(xiàn) https://a.com ,即使輸入 https://b.com 也會跳轉(zhuǎn)到 https://a.com 的網(wǎng)頁
需求:
請教一下能不能實現(xiàn)squid為多個網(wǎng)站做HTTPS反向代理?
技術(shù)問答
2017-03-17 13:34:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
請問高手:
我配置的squid2.7+radius認(rèn)證
出錯;錯誤如下:
[root@proxy etc]# /usr/local/squid/libexec/squid_radius_auth -f squid_radius_auth.conf
test @test
ERR
為什么會無法通過radius服務(wù)器測試
技術(shù)問答
2012-11-10 10:21:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
  在此,我們要配置一個只對內(nèi)部網(wǎng)絡(luò)提供代理服務(wù)的Proxy?Server。它將用戶分為高級用戶和普通用戶兩種,對高級用戶采用網(wǎng)卡物理地址識別的方法,普通用戶則需要輸入用戶名和口令才能正常使用。高級用戶沒有訪問時間和文件類型的限制,而普通用戶只在上班時可以訪問以及一些其它的限制。?
  安裝?
  可以從Squid站點www.squid-cache.org獲取該軟件的源代碼安裝包,包括gz和bz2兩種壓縮方式。也可以使用Linux的發(fā)行版,如Red?Hat提供的RPM包。?
  RPM方式安裝很簡單,命令如下:?
  $?rpm?-ivh?Squid-2.x.STALBx.i386.rpm?

  不過筆者認(rèn)為,即便是系統(tǒng)中已經(jīng)默認(rèn)安裝了Squid,也應(yīng)當(dāng)先刪掉然后安裝最新的源代碼包。因為開源軟件會不斷修正問題、提供更新的功能,使用最新版本可以保證最高的性能及安全,而且源代碼方式可以完全定制系統(tǒng)。不過STABLE穩(wěn)定版、DEVEL版通常是提供給開發(fā)人員測試程序的,假定下載了最新的穩(wěn)定版squid-2.5.STABLE2.tar.gz,用以下命令解開壓縮包:?
$?tar?xvfz?squid-2.5.STABLE.tar.gz?

  用bz2方式壓縮的包可能體積更小,相應(yīng)的命令是:?
$?tar?xvfj?squid-2.5.STABLE.tar.bz2?

  然后,進(jìn)入相應(yīng)目錄對源代碼進(jìn)行配置和編譯,命令如下:?
$?cd?squid-2.5.STABLE2?

  配置命令configure有很多選項,如果不清楚可先用“-help”查看。通常情況下,用到的選項有以下幾個:?
--prefix=/web/squid?
#指定Squid的安裝位置,如果只指定這一選項,那么該目錄下會有bin、sbin、man、conf等目錄,而主要的配置文件此時在conf子目錄中。為便于管理,最好用參數(shù)--sysconfdir=/etc把這個文件位置配置為/etc。?
--enable-storeio=ufs,null?
#使用的文件系統(tǒng)通常是默認(rèn)的ufs,不過如果想要做一個不緩存任何文件的代理服?
務(wù)器,就需要加上null文件系統(tǒng)。?
--enable-arp-acl?
#這樣可以在規(guī)則設(shè)置中直接通過客戶端的MAC地址進(jìn)行管理,防止客戶使用IP欺騙。?
--enable-err-languages="Simplify_Chinese"?
--enable-default-err-languages="Simplify_Chinese"?
#上面兩個選項告訴Squid編入并使用簡體中文錯誤信息。?
--enable-linux-netfilter?
#允許使用Linux的透明代理功能。?
--enable-underscore?
#允許解析的URL中出現(xiàn)下劃線,因為默認(rèn)情況下Squid會認(rèn)為帶下劃線的URL是?
非法的,并拒絕訪問該地址。?

  整個配置編譯過程如下:?
./configure?--prefix=/var/squid?
--sysconfdir=/etc?
--enable-arp-acl?
--enable-linux-netfilter?
--enable-pthreads?
--enable-err-language="Simplify_Chinese"?
--enable-storeio=ufs,null?
--enable-default-err-language="Simplify_Chinese"?
--enable-auth="basic"?
--enable-baisc-auth-helpers="NCSA"?
--enable-underscore?

  其中一些選項有特殊作用,將在下面介紹它們。?
  最后執(zhí)行make和make?install兩條命令,將源代碼編譯為可執(zhí)行文件,并拷貝到指定位置。?
  基本配置?
  安裝完成后,接下來要對Squid的運行進(jìn)行配置(不是前面安裝時的配置)。所有項目都在squid.conf中完成。Squid自帶的squid.conf包括非常詳盡的說明,相當(dāng)于一篇用戶手冊,對配置有任何疑問都可以參照解決。?
  在這個例子中,代理服務(wù)器同時也是網(wǎng)關(guān),內(nèi)部網(wǎng)絡(luò)接口eth0的IP地址為192.168.0.1,外部網(wǎng)絡(luò)接口eth1的IP地址為202.103.x.x。下面是一個基本的代理所需要配置選項:?
  http_port?192.168.0.1:3128?

  默認(rèn)端口是3128,當(dāng)然也可以是任何其它端口,只要不與其它服務(wù)發(fā)生沖突即可。為了安全起見,在前面加上IP地址,Squid就不會監(jiān)聽外部的網(wǎng)絡(luò)接口。?
  下面的配置選項是服務(wù)器管理者的電子郵件,當(dāng)錯誤發(fā)生時,該地址會顯示在錯誤頁面上,便于用戶聯(lián)系:?
cache_mgr?start@soocol.com?

  以下這些參數(shù)告訴Squid緩存的文件系統(tǒng)、位置和緩存策略:?
cache_dir?ufs?/var/squid?
cache_mem?32MB?
cache_swap_low?90?
cache_swap_high?95?

  在這里,Squid會將/var/squid目錄作為保存緩存數(shù)據(jù)的目錄,每次處理的緩存大小是32兆字節(jié),當(dāng)緩存空間使用達(dá)到95%時,新的內(nèi)容將取代舊的而不直接添加到目錄中,直到空間又下降到90%才停止這一活動。如果不想Squid緩存任何文件,如某些存儲空間有限的專有系統(tǒng),可以使用null文件系統(tǒng)(這樣不需要那些緩存策略):?
cache_dir?null?/tmp?

  下面的幾個關(guān)于緩存的策略配置中,較主要的是第一行,即用戶的訪問記錄,可以通過分析它來了解所有用戶訪問的詳盡地址:?
cache_access_log?/var/squid/access.log?
cache_log?/var/squid/cache.log?
cache_store_log?/var/squid/store.log?

  下面這行配置是在較新版本中出現(xiàn)的參數(shù),告訴Squid在錯誤頁面中顯示的服務(wù)器名稱:?
visible_hostname?No1.proxy?

  以下配置告訴Squid如何處理用戶,對每個請求的IP地址作為單獨地址處理:?
client_mask?255.255.255.255?

  如果是普通代理服務(wù)器,以上的配置已經(jīng)足夠。但是很多Squid都被用來做透明代理。所謂透明代理,就是客戶端不知道有代理服務(wù)器的存在,當(dāng)然也不需要進(jìn)行任何與代理有關(guān)的設(shè)置,從而大大方便了系統(tǒng)管理員。相關(guān)的選項有以下幾個:?
httpd_accel_host?virtual?
httpd_accel_port?80?
httpd_accel_with_proxy?on?
httpd_accel_user_host_header?on?

  在Linux上,可以用iptables/ipchains直接將對Web端口80的請求直接轉(zhuǎn)發(fā)到Squid端口3128,由Squid接手,而用戶瀏覽器仍然認(rèn)為它訪問的是對方的80端口。例如以下這條命令:?
iptables?-t?nat?-A?PREROUTING?-s?192.168.0.200/32?-p?tcp?--dport?80?-j?REDIRECT?3128?

  就是將192.168.0.200的所有針對80端口的訪問重定向到3128端口。?
  所有設(shè)置完成后,關(guān)鍵且重要的任務(wù)是訪問控制。Squid支持的管理方式很多,使用起來也非常簡單(這也是有人寧愿使用不做任何緩存的Squid,也不愿意單獨使用iptables的原因)。Squid可以通過IP地址、主機名、MAC地址、用戶/密碼認(rèn)證等識別用戶,也可以通過域名、域后綴、文件類型、IP地址、端口、URL匹配等控制用戶的訪問,還可以使用時間區(qū)間對用戶進(jìn)行管理,所以訪問控制是Squid配置中的重點。Squid用ACL(Access?Control?List,訪問控制列表)對訪問類型進(jìn)行劃分,用http_access?deny?或allow進(jìn)行控制。根據(jù)需求首先定義兩組用戶advance和normal,還有代表所有未指明的用戶組all及不允許上網(wǎng)的baduser,配置代碼如下:?
acl?advance?192.168.0.2-192.168.0.10/32?
acl?normal?src?192.168.0.11-192.168.0.200/32?
acl?baduser?src?192.168.0.100/32?
acl?baddst?dst?www.soocol.com?
acl?all?src?0.0.0.0/0?
http_access?deny?baduser?
http_access?allow?advance?
http_access?allow?normal?

  可以看出,ACL的基本格式如下:?
  acl?列表名稱?控制方式?控制目標(biāo)?

  比如acl?all?src?0.0.0.0/0,其名稱是all,控制方式是src源IP地址,控制目標(biāo)是0.0.0.0/0的IP地址,即所有未定義的用戶。出于安全考慮,總是在最后禁止這個列表。?
  下面這個列表代表高級用戶,包括IP地址從192.168.0.2到192.168.0.10的所有計算機:?
acl?advance?192.168.0.2-192.168.0.20/32?

  下面這個baduser列表只包含一臺計算機,其IP地址是192.168.0.100:?
acl?baduser?192.168.0.100/32?

  ACL寫完后,接下來要對它們分別進(jìn)行管理,代碼如下:?
http_access?deny?baduser?
http_access?allow?advance?
http_access?allow?normal?

  上面幾行代碼告訴Squid不允許baduser組訪問Internet,但advance、normal組允許(此時還沒有指定詳細(xì)的權(quán)限)。由于Squid是按照順序讀取規(guī)則,會首先禁止baduser,然后允許normal。如果將兩條規(guī)則順序顛倒,由于baduser在normal范圍中,Squid先允許了所有的normal,那么再禁止baduser就不會起作用。?
  特別要注意的是,Squid將使用allow-deny-allow-deny……這樣的順序套用規(guī)則。例如,當(dāng)一個用戶訪問代理服務(wù)器時,Squid會順序測試Squid中定義的所有規(guī)則列表,當(dāng)所有規(guī)則都不匹配時,Squid會使用與最后一條相反的規(guī)則。就像上面這個例子,假設(shè)有一個用戶的IP地址是192.168.0.201,他試圖通過這臺代理服務(wù)器訪問Internet,會發(fā)生什么情況呢?我們會發(fā)現(xiàn),他能夠正常訪問,因為Squid找遍所有訪問列表也沒有和192.168.0.201有關(guān)的定義,便開始應(yīng)用規(guī)則,而最后一條是deny,那么Squid默認(rèn)的下一條處理規(guī)則是allow,所以192.168.0.201反而能夠訪問Internet了,這顯然不是我們希望的。所以在所有squid.conf中,最后一條規(guī)則永遠(yuǎn)是http_access?deny?all,而all就是前面定義的“src?0.0.0.0”。?
  高級控制?
  前面說過,Squid的控制功能非常強大,只要理解Squid的行為方式,基本上就能夠滿足所有的控制要求。下面就一步一步來了解Squid是如何進(jìn)行控制管理的。?
  通過IP地址來識別用戶很不可靠,比IP地址更好的是網(wǎng)卡的MAC物理地址。要在Squid中使用MAC地址識別,必須在編譯時加上“--enable-arp-acl”選項,然后可以通過以下的語句來識別用戶:?
acl?advance?arp?00:01:02:1f:2c:3e?00:01:02:3c:1a:8b?...?

  它直接使用用戶的MAC地址,而MAC地址一般是不易修改的,即使有普通用戶將自己的IP地址改為高級用戶也無法通過,所以這種方式比IP地址可靠得多。?
  假如不想讓用戶訪問某個網(wǎng)站應(yīng)該怎么做呢?可以分為兩種情況:一種是不允許訪問某個站點的某個主機,比如ok的主機是ok.sina.com.cn,而其它的新浪資源卻是允許訪問的,那么ACL可以這樣寫:?
acl?sinapage?dstdomain?ok.sina.com.cn?
...?...?
http_access?deny?ok?
...?...?

  由此可以看到,除了ok,其它如www.sina.com.cn、news.sina.com.cn都可以正常訪問。?
  另一種情況是整個網(wǎng)站都不許訪問,那么只需要寫出這個網(wǎng)站共有的域名即可,配置如下:?
acl?qq?dstdomain?.tcccent.com.cn?

  注意tcccent前面的“.”,正是它指出以此域名結(jié)尾的所有主機都不可訪問,否則就只有tcccent.com.cn這一臺主機不能訪問。?
  如果想禁止對某個IP地址的訪問,如202.118.2.182,可以用dst來控制,代碼如下:?

acl?badaddr?dst?202.118.2.182?

  當(dāng)然,這個dst也可以是域名,由Squid查詢DNS服務(wù)器將其轉(zhuǎn)換為IP。?
  還有一種比較廣泛的控制是文件類型。如果不希望普通用戶通過代理服務(wù)器下載MP3、AVI等文件,完全可以對他們進(jìn)行限制,代碼如下:?
acl?mmxfile?urlpath_regex?\.mp3$?\.avi$?\.exe$?
http_access?deny?mmxfile?

  看到regex,很多讀者應(yīng)該心領(lǐng)神會,因為這條語句使用了標(biāo)準(zhǔn)的規(guī)則表達(dá)式(又叫正則表達(dá)式)。它將匹配所有以.mp3、.avi等結(jié)尾的URL請求,還可以用-i參數(shù)忽略大小寫,例如以下代碼:?
acl?mmxfile?urlpath_regex?-i?\.mp3$?

  這樣,無論是.mp3還是.MP3都會被拒絕。當(dāng)然,-i參數(shù)適用于任何可能需要區(qū)分大小寫的地方,如前面的域名控制。?
  如果想讓普通用戶只在上班時間可以上網(wǎng),而且是每周的工作日,用Squid應(yīng)當(dāng)如何處理呢?看看下面的ACL定義:?
acl?worktime?time?MTWHF?8:30-12:00?14:00-18:00?
http_access?deny?!worktime?

  首先定義允許上網(wǎng)的時間是每周工作日(星期一至星期五)的上午和下午的固定時段,然后用http_access?定義所有不在這個時間段內(nèi)的請求都是不允許的。?
  或者為了保證高級用戶的帶寬,希望每個用戶的并發(fā)連接不能太多,以免影響他人,也可以通過Squid控制,代碼如下:?
acl?conncount?maxconn?3?
http_access?deny?conncount?normal?
http_access?allow?normal?

  這樣,普通用戶在某個固定時刻只能同時發(fā)起三個連接,從第四個開始,連接將被拒絕。?
  總之,Squid的ACL配置非常靈活、強大,更多的控制方式可以參考squid.conf.default。?
  認(rèn)證?
  用戶/密碼認(rèn)證為Squid管理提供了更多便利,最常用的認(rèn)證方式是NCSA。從Squid?2.5版本開始,NCSA認(rèn)證包含在了basic中,而非以前單獨的認(rèn)證模塊。下面來看看實現(xiàn)認(rèn)證的具體操作。?
  首先在編譯時配置選項應(yīng)包括以下配置:?
--enable-auth="basic"?--enable-basic-auth-helpers="NCSA"?

  “make?install”以后,需要將“helpers/basic_auth/NCSA/ncsa_auth”拷貝到用戶可執(zhí)行目錄中,如/usr/bin(如果在該目錄中找不到這個執(zhí)行文件,在編譯時請使用make?all而不是make,或者直接在該目錄中執(zhí)行make),然后需要借助Apache的密碼管理程序htpasswd來生成用戶名/密碼對應(yīng)的文件,就像下面這行代碼:?
htpasswd?-c?/var/squid/etc/password?guest?

  在輸入兩遍guest用戶的密碼后,一個guest用戶就生成了。如果以后需要添加用戶,把上面的命令去掉-c參數(shù)再運行即可。?
  Squid?2.5在認(rèn)證處理上有了較大的改變,這里就只討論2.5版本的處理方法,2.4及以下版本請參考squid.conf.default。在2.5版的squid.conf中,包括以下幾個相關(guān)選項:?
#該選項指出了認(rèn)證方式(basic)、需要的程序(ncsa_auth)和?
對應(yīng)的密碼文件(password)?
auth_param?basic?program?/usr/bin/ncsa_auth?/var/squid/etc/password?
#?指定認(rèn)證程序的進(jìn)程數(shù)?
auth_param?basic?children?5?
#?瀏覽器顯示輸入用戶/密碼對話框時的領(lǐng)域內(nèi)容?
auth_param?basic?realm?My?Proxy?Caching?Domain?
#?基本的認(rèn)證有效時間?
auth_param?basic?credentialsttl?2?hours?
#?普通用戶需要通過認(rèn)證才能訪問Internet?
acl?normal?proxy_auth?REQUIRED?
http_access?allow?normal?

  通過以上的配置即可完成認(rèn)證工作。有的讀者可能要問:認(rèn)證只針對普通用戶,而高級用戶是直接上網(wǎng)的,該怎么處理呢?其實,這兩種用戶是可以共存的。如前所述,Squid是順序處理http_access的,所以在http_access處理過程中,如果先處理normal用戶,那么當(dāng)前用戶無論是否屬于高級用戶,都會被要求進(jìn)行認(rèn)證;相反如果先處理高級用戶,剩下的就只有需要認(rèn)證的普通用戶了。例如以下配置代碼:?
...?
http_access?allow?normal?(需要認(rèn)證)?
http_access?allow?advance?(不需要認(rèn)證)?
...?

  不管是否為noauth用戶,都要求進(jìn)行用戶名/密碼驗證。正確的方法是將二者位置交換,代碼如下:?
...?
http_access?allow?advance?
http_access?allow?normal?
...?

  這時,高級用戶不會受到任何影響。?
  總結(jié)?
  下面把整個squid.conf總結(jié)一下:?
#?服務(wù)器配置?
http_port?192.168.0.1:3128?
cache_mgr?start@soocol.com?
cache_dir?null?/tmp?
cache_access_log?/var/squid/access.log?
cache_log?/var/squid/cache.log?
cache_store_log?/var/squid/store.log?
visible_hostname?No1.proxy?
client_mask?255.255.255.255?
httpd_accel_host?virtual?
httpd_accel_port?80?
httpd_accel_with_proxy?on?
httpd_accel_user_host_header?on?
#?用戶分類?
acl?advance?arp?00:01:02:1f:2c:3e?00:01:02:3c:1a:8b?...?
acl?normal?proxy_auth?REQUIED?
acl?all?src?0.0.0.0?
#?行為分類?
acl?mmxfile?urlpath_regex?\.mp3$?\.avi$?\.exe$?
acl?conncount?maxconn?3?
acl?worktime?time?MTWHF?8:30-12:00?14:00-18:00?
acl?sinapage?dstdomain?ok.sina.com.cn?
acl?qq?dstdomain?.tcccent.com.cn?
#?處理?
http_access?allow?advance?
http_access?deny?conncount?normal?
http_access?deny?!worktime?
http_access?deny?mmxfile?
http_access?deny?sinapage?
http_access?deny?qq?
http_access?allow?normal?

  配置后的狀況是,advance組可以不受任何限制地訪問Internet,而normal組則只能在工作時間上網(wǎng),而且不能下載多媒體文件,不能訪問某些特定的站點,而且發(fā)送請求不能超過3個。?
  通過本文的介紹,它可以了解Squid的基本能力。當(dāng)然,它的能力遠(yuǎn)不止此,可以建立強大的代理服務(wù)器陣列,可以幫助本地的Web服務(wù)器提高性能,可以提高本地網(wǎng)絡(luò)的安全性等。要想發(fā)揮它的功效,還需要進(jìn)一步控制。


技術(shù)問答
2009-05-05 17:38:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 我這里設(shè)置的是Web服務(wù)器和Squid服務(wù)器在同一天機器上,這臺機器配置一個透明Proxy,假如本地Web地址為*.haha.com這個網(wǎng)站,當(dāng)用戶訪問我這個網(wǎng)站的時候不經(jīng)過代理直接訪問,訪問其他的網(wǎng)站如:www.oschina.net就需要代理這個怎么配置呢?
技術(shù)問答
2016-02-19 20:12:00