开始搞实验的杂谈(四)-------主要关于第一个比较完整的boost支撑的client和单线程server

第一:现在自己在request parser里面新实现一个解析请求的函数,原本的那个函数逐个字符地来字符来读我真心不觉得有多高效,虽然我也只是用字符串的方式来分割,然后再赋值给request的各个变量。这里才知道…c++ 在分割字符串方面这么挫的…额,没办法了,就自己用strtok封装一个方法吧,返回一个vector<string>。

vector<string> split(string& str,const char* c)
{
    char *cstr, *p;
    vector<string> res;
    cstr = new char[str.size()+1];
    strcpy(cstr,str.c_str());
    p = strtok(cstr,c);
    while(p!=NULL)
    {
        res.push_back(p);
        p = strtok(NULL,c);
    }
    return res;
}

 

 

第二:

每个转义符其实都等于一个char,比如\r是一个,\n也是一个

string str = "allen go!\r\n";中,要非常注意以下两个事情:
find_first_of("\r\n") == 9
find_last_of("\r\n") == 10

也就是说,第一个函数是以这个字符串的下标为准,可以理解成从主字符串的头开始找的;而第二个函数就是以最后一个字符的下标为准,可以理解成从主字符串的末尾开始往前找的。

然后,str.substr(0, 3) == “all",就理解成,从下标0开始,取偏移量为第二个参数的数值程度的子串。

要有这么一个约定:当content超出了单个request的buf可以发送的量的时候,那么就截断它,然后在末尾加上\r\n来标示,当然在server端处理的时候,会根据find_last_of

 

第三:不过貌似是不能够接受“\r\n\r\n"这种方式的,但是又决定不用分割的方法了,因为突然想起content里面也有分行符的。。。。。。但是又突然想到一个很挫的办法,读出buf里面的第一个字符不就可以判断是什么方法了么?!太聪明了…然后是GET的话还是可以用这种方法来分割的,如果是POST的话还是老老实实一行行分离出来吧。

 

第四:现在在写server端读取内容的方法,貌似是要好好考虑怎么样超过了buf大小的content分多次传输的,嗯,我还是先试试最原始最挫的方法能否成功从client端接受POST请求之后把content保存到本地吧~~~

 

ok,进入测试阶段!来吧!

 暂停POST请求的格式固定是这样的:

POST /test.txt HTTP1.1

Host: 192.168.2.83

Accept: */*

Content-Type: text/plain

Content-Length: 5555

Connection: close



[Content buffer......]

 

然后暂定的GET request的格式是这样的:

GET /test.txt HTTP1.1
Host: 192.168.2.83
Accept: */*
Connection: close

 

第六:有一点需要我以后在搞程序的注意,一定要及时释放内存!特别像string和vector这种,这篇博文讲释放vector的内存很不错,每次看到51CTO的文章总感觉很踏实,人家的文章都弄得很好:

http://developer.51cto.com/art/201306/397114.htm

 

第七:原来boost里面有split方法!太好了:http://www.cnblogs.com/MikeZhang/archive/2012/03/24/mysplitfuncpp.html,结果发现还是不如自己直接用find和substr来搞弄得快…还省点空间不用生成那么多的中间变量

 

第八:数值,char数组,string之间的变换可以这样:

    unsigned long tmp_long = 333333;
    char tmp_char[30] = "";
    itoa(tmp_long, tmp_char, 10);
    string tmp_string1 = tmp_char;
    cout << tmp_string1 << endl;
    cout << tmp_string1.size() << endl;

这样得出的tmp_string1的长度是6,显示的就是333333

 

好了,另开一篇吧,现在handle_post_request的函数也 写好了。

 

 

 

posted @ 2013-11-27 20:14  Allen_Tung  阅读(360)  评论(0编辑  收藏  举报