??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品无码久久青草,国产∨亚洲V天堂无码久久久,亚洲日本va午夜中文字幕久久 http://www.shnenglu.com/birdshover/zh-cnWed, 07 May 2025 16:40:28 GMTWed, 07 May 2025 16:40:28 GMT60用HGE写了个贪吃蛇Q自p乐一?/title><link>http://www.shnenglu.com/birdshover/archive/2009/09/05/95357.html</link><dc:creator>BirdsHover</dc:creator><author>BirdsHover</author><pubDate>Sat, 05 Sep 2009 00:50:00 GMT</pubDate><guid>http://www.shnenglu.com/birdshover/archive/2009/09/05/95357.html</guid><wfw:comment>http://www.shnenglu.com/birdshover/comments/95357.html</wfw:comment><comments>http://www.shnenglu.com/birdshover/archive/2009/09/05/95357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/birdshover/comments/commentRss/95357.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/birdshover/services/trackbacks/95357.html</trackback:ping><description><![CDATA[ 目为VS2008目Q设|项目属?C.C++附加包含目录为hge1.8的Include目录Q设|链接器/输入 ?附加依赖hge.lib hgehelp.libQ同Ӟ忽略特定库libc.lib<br><br>OK,q样目可跑v来了?br><br>主要用到了hge里的菜单Q和l制矩ŞQ比较简单?br><br>下蝲地址Q?a target="_blank">下蝲地址1</a><br><br>文g大小500KQ运行文件和目文g都在里面?img src ="http://www.shnenglu.com/birdshover/aggbug/95357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/birdshover/" target="_blank">BirdsHover</a> 2009-09-05 08:50 <a href="http://www.shnenglu.com/birdshover/archive/2009/09/05/95357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于unionhttp://www.shnenglu.com/birdshover/archive/2009/06/18/88019.htmlBirdsHoverBirdsHoverThu, 18 Jun 2009 11:17:00 GMThttp://www.shnenglu.com/birdshover/archive/2009/06/18/88019.htmlhttp://www.shnenglu.com/birdshover/comments/88019.htmlhttp://www.shnenglu.com/birdshover/archive/2009/06/18/88019.html#Feedback0http://www.shnenglu.com/birdshover/comments/commentRss/88019.htmlhttp://www.shnenglu.com/birdshover/services/trackbacks/88019.htmlunionl构中,成员是共享内存的? 有朋友问 union { int i[2]; long k; char c[4]; }r,*s=&r; s->i[0]=0x39; s->i[1]=0x38; 那么printf("%c\n",s->c[0]);输出什么? 输出?Q百思不得其解。现在想来,是忽略了输出的是charQ?x39作ؓasc2码,对应的字W就?. union的成员内存共享,那么,&(s->i[0]) == &(s->k) == &(s->c[0]) 在s->i[0]于{于8bit的情况下Qs->c[0] == s->i[0] 也就是说s->c[0] == 0x39 == 57也就是字W?9' 假如s->[0] > 0x99 那么Qs->[0]是s->i[0]的前8bit的倹{? Ҏ(gu)一点的情况Qs->i[0]=0x39393939; 那么s->c[0] == s->c[1] == s->c[2] == s->c[3] == 0x39 == 57 == '9'

BirdsHover 2009-06-18 19:17 发表评论
]]>
CString 按符号切割ؓ数组http://www.shnenglu.com/birdshover/archive/2009/01/05/71214.htmlBirdsHoverBirdsHoverMon, 05 Jan 2009 04:04:00 GMThttp://www.shnenglu.com/birdshover/archive/2009/01/05/71214.htmlhttp://www.shnenglu.com/birdshover/comments/71214.htmlhttp://www.shnenglu.com/birdshover/archive/2009/01/05/71214.html#Feedback0http://www.shnenglu.com/birdshover/comments/commentRss/71214.htmlhttp://www.shnenglu.com/birdshover/services/trackbacks/71214.html
void SuperCString::Split(CString rawString,char sp,CString* sp_arr[],int* length)
{
    
    CString
* arr = new CString[*length];
    
int pos = 1;
    
int repeatcount = 0;
    
while(pos > 0){
        
if(repeatcount >= *length){
            
break;
        }
        pos 
= rawString.Find(sp,0);
        
if(pos > -1)
            arr[repeatcount] 
= rawString.Mid(0,pos + 1);
        
else
            arr[repeatcount] 
= rawString;
        rawString 
= rawString.Mid(pos + 1);
        repeatcount
++;
    }
    
*length = repeatcount;
    
*sp_arr = arr;
}

调用方式:
    SuperCString scs;
    CString
* arr = new CString[5];
    
int len = 5;
    scs.Split(header,
'\n',&arr,&len);
    CString outaa;
    outaa.Format(L
"%d",len);
    
for(int i = 0;i<len;i++){
        outaa 
+= L"\r\n" + arr[i];
    }
    AfxMessageBox(outaa);
    
return;


BirdsHover 2009-01-05 12:04 发表评论
]]>
记录wchar_t 与char的换?/title><link>http://www.shnenglu.com/birdshover/archive/2008/12/19/69844.html</link><dc:creator>BirdsHover</dc:creator><author>BirdsHover</author><pubDate>Fri, 19 Dec 2008 08:40:00 GMT</pubDate><guid>http://www.shnenglu.com/birdshover/archive/2008/12/19/69844.html</guid><wfw:comment>http://www.shnenglu.com/birdshover/comments/69844.html</wfw:comment><comments>http://www.shnenglu.com/birdshover/archive/2008/12/19/69844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/birdshover/comments/commentRss/69844.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/birdshover/services/trackbacks/69844.html</trackback:ping><description><![CDATA[ <p>开始尝试了以下两个Ҏ(gu)<br />//*************************************************************//<br />//wchar_t 转换 为char<br />//*************************************************************//<br />bool wstr2cstr(wchar_t *orig,char * target)<br />{<br /> size_t origsize = wcslen(orig) + 1;<br /> size_t convertedChars = 0;<br /> wcstombs_s(&convertedChars, target, origsize, orig, _TRUNCATE);<br /> return true;<br />}</p> <p>//*************************************************************//<br />//char 转换 为wchar_t<br />//*************************************************************//<br />bool cstr2wstr(char *orig,wchar_t * target)<br />{<br /> size_t origsize = strlen(orig) + 1;<br /> size_t convertedChars = 0;<br /> mbstowcs_s(&convertedChars, target, origsize, orig, _TRUNCATE);<br /> return true;<br />}<br /><br />发现wstr2cstr没有反应Qcstr2wstr正常。想不通?br /><br />后来换成<br /><br />//*************************************************************//<br />// ?宽字节wchar_t* 转换 单字节char*<br />//*************************************************************//<br />void UnicodeToAnsi( const wchar_t* szStr, char* pResult)<br />{<br /> int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );<br /> if (nLen == 0)<br /> {<br />    return;<br /> }<br /> WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );<br />}<br />//*************************************************************//<br />//?单字节char* 转换?宽字?wchar*<br />//*************************************************************//<br />void AnsiToUnicode( const char* szStr , wchar_t* pResult )<br />{<br /> int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );<br /> if (nLen == 0)<br /> {<br />    return;<br /> }<br /> MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );<br />}<br /><br />好?/p> <img src ="http://www.shnenglu.com/birdshover/aggbug/69844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/birdshover/" target="_blank">BirdsHover</a> 2008-12-19 16:40 <a href="http://www.shnenglu.com/birdshover/archive/2008/12/19/69844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>conio.hQ像C#一样ReadKeyhttp://www.shnenglu.com/birdshover/archive/2008/12/18/69758.htmlBirdsHoverBirdsHoverThu, 18 Dec 2008 11:39:00 GMThttp://www.shnenglu.com/birdshover/archive/2008/12/18/69758.htmlhttp://www.shnenglu.com/birdshover/comments/69758.htmlhttp://www.shnenglu.com/birdshover/archive/2008/12/18/69758.html#Feedback0http://www.shnenglu.com/birdshover/comments/commentRss/69758.htmlhttp://www.shnenglu.com/birdshover/services/trackbacks/69758.html//-------------------------------------------------------------------- #
 
#include "stdafx.h"
#include 
"windows.h"
#include  
<iostream> 
using  namespace  std;

#include 
<conio.h>

#define ESC_CODE  27
#define KEYB_UP   72
#define KEYB_DOWN 80

int _tmain(int argc, _TCHAR* argv[])
{
    
char ch;

    printf(
"Push up or down key, Esc to exit program.\n");

    
do
    {
        
switch(ch=getch())
        {
        
case KEYB_UP:
            printf(
"up\n");
            
break;
        
case KEYB_DOWN:
            printf(
"down\n");
            
break;    
        }
    }
while(ch != ESC_CODE);

    
return 0;
}

//--------------------------------------------------------------------

上面q段代码可以让Console处于{待输入状态了?img src ="http://www.shnenglu.com/birdshover/aggbug/69758.html" width = "1" height = "1" />

BirdsHover 2008-12-18 19:39 发表评论
]]>
bat 命o备忘http://www.shnenglu.com/birdshover/archive/2008/11/28/68095.htmlBirdsHoverBirdsHoverFri, 28 Nov 2008 10:22:00 GMThttp://www.shnenglu.com/birdshover/archive/2008/11/28/68095.htmlhttp://www.shnenglu.com/birdshover/comments/68095.htmlhttp://www.shnenglu.com/birdshover/archive/2008/11/28/68095.html#Feedback0http://www.shnenglu.com/birdshover/comments/commentRss/68095.htmlhttp://www.shnenglu.com/birdshover/services/trackbacks/68095.html 

1 echo ?@
@                      #关闭单行回显
echo off               #从下一行开始关闭回?
@echo off              #从本行开始关闭回显。一般批处理W一行都是这?
echo on                #从下一行开始打开回显
echo                   #昄当前?echo off 状态还?echo on 状?
echo.                  #输出一个”回车换行”,I白?
                          #(?/span>echo, echo; echo+ echo[ echo] echo/ echo\)
 
2 errorlevel
echo %errorlevel%
每个命oq行l束Q可以用q个命o行格式查看返回码
默认gؓ0Q一般命令执行出错会?errorlevel ?
3 dir
dir                   #昄当前目录中的文g和子目录
dir /a                #昄当前目录中的文g和子目录Q包括隐藏文件和pȝ文g
dir c: /a:d           #昄 C 盘当前目录中的目?
dir c: /a:-d          #昄 C 盘根目录中的文g
dir c:\ /b/p          #/b只显C文件名Q?span>/p分页昄
dir *.exe /s          #昄当前目录和子目录里所有的.exe文g
4 cd
																								cd\                   #q入根目?/span>
cd                    #昄当前目录
cd /d d:\sdk          #可以同时更改盘符和目?/span>
5 md
																								md d:\a\b\c           #如果 d:\a 不存在,会自动创徏中目录
#如果命o扩展名被停用Q则需要键?mkdir \a\b\c?/span>
6 rd
rd abc                #删除当前目录里的 abc 子目录,要求为空目录
rd /s/q d:\temp       #删除 d:\temp 文g夹及其子文g夹和文gQ?q安静模式
7 del
del d:\test.txt       #删除指定文gQ不能是隐藏、系l、只L?
del /q/a/f d:\temp\*.*
删除 d:\temp 文g多w面的所有文Ӟ包括隐藏、只诅R系l文Ӟ不包括子目录
del /q/a/f/s d:\temp\*.*
删除 d:\temp 及子文g多w面的所有文Ӟ包括隐藏、只诅R系l文Ӟ不包括子目录
8 ren
 
ren d:\temp tmp       #支持Ҏ(gu)件夹的重命名
9 cls
清屏
10 type
昄文g内容
type c:\boot.ini      #昄指定文g的内容,E序文g一般会昄q
type *.txt            #昄当前目录里所?txt文g的内?/pre>
																						
11 copy
拯文g
copy c:\test.txt d:\test.bak
复制 c:\test.txt 文g?d:\ Qƈ重命名ؓ test.bak
																								copy con test.txt
从屏q上{待输入Q按 Ctrl+Z l束输入Q输入内容存为test.txt文g
con代表屏幕Qprn代表打印机,nul代表I?/span>
copy 1.txt + 2.txt 3.txt
合ƈ 1.txt ?2.txt 的内容,保存?3.txt 文g
如果不指?3.txt Q则保存?1.txt
																								copy test.txt +
复制文g到自己,实际上是修改了文件日?/pre>
																						
12 title
讄cmdH口的标?/pre>
																						
title 新标题        ?#可以看到cmdH口的标题栏变了
13 ver
昄pȝ版本
14 label ?vol
讄h
vol                   #昄h
label                 #昄hQ同时提C入新h
label c:system        #讄C盘的h?system
15 pause
暂停命o
16 rem ?::
注释命o
注释行不执行操作
17 date ?time
日期和时?/pre>
																						
date            #昄当前日期Qƈ提示输入新日期,按\"回R\"略过输入
date/t          #只显C当前日期,不提C入新日期
time            #昄当前旉Qƈ提示输入新时_按\"回R\"略过输入
time/t          #只显C当前时_不提C入新旉
																								18 goto ?:
跌{命o
																						
:label          #行首?表示该行是标{行Q标{行不执行操?
goto label      #跌{到指定的标签那一?/pre>
																						
19 find (外部命o)
查找命o
find \"abc\" c:\test.txt
?c:\test.txt 文g里查扑֐ abc 字符串的?
如果找不刎ͼ设 errorlevel q回码ؓ1
find /i “abc?c:\test.txt
查找?abc 的行Q忽略大写
find /c \"abc\" c:\test.txt
昄?abc 的行的行?/pre>
																						
20 more (外部命o)
逐屏昄
																								more c:\test.txt      #逐屏昄 c:\test.txt 的文件内?/pre>
																						
21 tree
昄目录l构
tree d:\              #昄D盘的文g目录l构
																								22 &
序执行多条命oQ而不命令是否执行成?/pre>
																						
																								23 &&
序执行多条命oQ当到执行出错的命令后不执行后面的命?/pre>
																						
find \"ok\" c:\test.txt && echo 成功
如果扑ֈ了\"ok\"字样Q就昄\"成功\"Q找不到׃昄
																								24 ||
序执行多条命oQ当到执行正确的命令后不执行后面的命?/pre>
																						
find \"ok\" c:\test.txt || echo 不成?
如果找不到\"ok\"字样Q就昄\"不成功\"Q找C׃昄
25 |
道命o
dir *.* /s/a | find /c \".exe\"
道命o表示先执?dir 命oQ对其输出的l果执行后面?find 命o
该命令行l果Q输出当前文件夹及所有子文g多w?exe文g的个?/pre>
																						
type c:\test.txt|more
q个?more c:\test.txt 的效果是一L
26 > ?>>
输出重定向命?/pre>
																						
> 清除文g中原有的内容后再写入
>> q加内容到文件末,而不会清除原有的内容
主要本来显C在屏幕上的内容输出到指定文件中
指定文g如果不存在,则自动生成该文g
type c:\test.txt >prn
屏幕上不昄文g内容Q{向输出到打印?/pre>
																						
echo hello world>con
在屏q上昄hello worldQ实际上所有输出都是默?>con ?/pre>
																						
copy c:\test.txt f: >nul
拯文gQƈ且不昄\"文g复制成功\"的提CZ息,但如果f盘不存在Q还是会昄出错信息
																								copy c:\test.txt f: >nul 2>nul
不显C”文件复制成功”的提示信息Qƈ且f盘不存在的话Q也不显C错误提CZ?/pre>
																						
echo ^^W ^> ^W>c:\test.txt
生成的文件内容ؓ ^W > W
^ ?> 是控制命令,要把它们输出到文Ӟ必须在前面加?^ W号
																								27 <
从文件中获得输入信息Q而不是从屏幕?/pre>
																						
一般用?date time label {需要等待输入的命o
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
q样可以不{待输入直接修改当前日期
																								28 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*
命o行传递给批处理的参数
%0 批处理文件本w?
%1 W一个参?
%9 W九(ji)个参?
%* 从第一个参数开始的所有参?
 
批参?%n)的替代已被增强。?zhn)可以使用以下语?
 
      %~1           - 删除引号(\")Q扩?%1
      %~f1          - ?%1 扩充C个完全合格的路径?
      %~d1          - 仅将 %1 扩充C个驱动器?
      %~p1          - 仅将 %1 扩充C个\?
      %~n1          - 仅将 %1 扩充C个文件名
      %~x1          - 仅将 %1 扩充C个文件扩展名
      %~s1          - 扩充的\径指含有短名
      %~a1          - ?%1 扩充到文件属?
      %~t1          - ?%1 扩充到文件的日期/旉
      %~z1          - ?%1 扩充到文件的大小
      %~$PATH : 1 - 查找列在 PATH 环境变量的目录,q将 %1
                    扩充到找到的W一个完全合格的名称。如果环?
                    变量名未被定义,或者没有找到文Ӟ此组合键?
                    扩充到空字符?
 
可以l合修定W来取得多重l果:
 
     %~dp1         - 只将 %1 扩展到驱动器号和路径
     %~nx1         - 只将 %1 扩展到文件名和扩展名
     %~dp$PATH:1 - 在列?PATH 环境变量中的目录里查?%1Q?
                    q扩展到扑ֈ的第一个文件的驱动器号和\径?
     %~ftza1       - ?%1 扩展到类?DIR 的输?
可以参照 call/? ?for/? 看出每个参数的含?/pre>
																						
echo load \"%%1\" \"%%2\">c:\test.txt
生成的文件内容ؓ load \"%1\" \"%2\"
批处理文仉Q用q个格式把命令行参数输出到文?/pre>
																						
29 if
判断命o
if \"%1\"==\"/a\" echo W一个参数是/a
if /i \"%1\" equ \"/a\" echo W一个参数是/a
/i 表示不区分大写Qequ ?== 是一LQ其它运符参见 if/?
if exist c:\test.bat echo 存在c:\test.bat文g
if not exist c:\windows (
      echo 不存在c:\windows文g?
      )
if exist c:\test.bat (
      echo 存在c:\test.bat
      ) else (
      echo 不存在c:\test.bat
      )
																								30 setlocal ?endlocal
讄”命令扩展名”和”g~环境变量扩充?/pre>
																						
SETLOCAL ENABLEEXTENSIONS              #启用\"命o扩展名\"
SETLOCAL DISABLEEXTENSIONS             #停用\"命o扩展名\"
SETLOCAL ENABLEDELAYEDEXPANSION        #启用\"延缓环境变量扩充\"
SETLOCAL DISABLEDELAYEDEXPANSION       #停用\"延缓环境变量扩充\"
ENDLOCAL                               #恢复C用SETLOCAL语句以前的状?/pre>
																						
																								“命令扩展名”默认ؓ启用
“g~环境变量扩充”默认ؓ停用
批处理结束系l会自动恢复默认?/pre>
																						
可以修改注册表以用\"命o扩展名\"Q详?cmd /? 。所以用到\"命o扩展名\"的程
序,在开头和l尾加上 SETLOCAL ENABLEEXTENSIONS ?ENDLOCAL 语句Q以?
保程序能在其它系l上正确q行
\"延缓环境变量扩充\"主要用于 if ?for 的符合语句,?set 的说明里有其实用例程
31 set
讄变量
引用变量可在变量名前后加 % Q即 %变量?
set                      #昄目前所有可用的变量Q包括系l变量和自定义的变量
echo %SystemDrive%       #昄pȝ盘盘W。系l变量可以直接引?
set p                    #昄所有以p开头的变量Q要是一个也没有perrorlevel=1
set p=aa1bb1aa2bb2       #讄变量pQƈ赋gؓ = 后面的字W串Q即aa1bb1aa2bb2
echo %p%                 #昄变量p代表的字W串Q即aa1bb1aa2bb2
echo %p:~6%              #昄变量p中第6个字W以后的所有字W,即aa2bb2
echo %p:~6,3%            #昄W?个字W以后的3个字W,即aa2
echo %p:~0,3%            #昄?个字W,即aa1
echo %p:~-2%             #昄最后面?个字W,即b2
echo %p:~0,-2%           #昄除了最?个字W以外的其它字符Q即aa1bb1aa2b
echo %p:aa=c%            #用c替换变量p中所有的aaQ即昄c1bb1c2bb2
echo %p:aa=%             #变量p中的所有aa字符串置换ؓI,xC?bb12bb2
echo %p:*bb=c%           #W一个bb及其之前的所有字W被替换为cQ即昄c1aa2bb2
set p=%p:*bb=c%          #讄变量pQ赋gؓ %p:*bb=c% Q即c1aa2bb2
set /a p=39              #讄p为数值型变量Qgؓ39
set /a p=39/10           #支持q算W,有小数时用去法Q?9/10=3.9Q去־3Qp=3
set /a p=p/10            #?/a 参数Ӟ?= 后面的变量可以不?直接引用
set /a p=?&0ꐠ        ?#”与”运,要加引号。其它支持的q算W参见set/?
set p=                   #取消p变量
																								set /p p=误?/span>
屏幕上显C”请输入”,q会输入的字符串赋值给变量p
注意q条可以用来取代 choice 命o
注意变量?if ?for 的复合语句里是一ơ性全部替换的Q如
@echo off
set p=aaa
if %p%==aaa (
      echo %p%
      set p=bbb
      echo %p%
      )
l果显C?
aaa
aaa
因ؓ在读?if 语句时已l将所?%p% 替换为aaa
q里的\"替换\"Q在 /? 帮助里就是指\"扩充\"、\"环境变量扩充\"
可以启用”g~环境变量扩充”,?! 来引用变量,?!变量?
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaa
if %p%==aaa (
      echo %p%
      set p=bbb
      echo !p!
      )
ENDLOCAL
l果显C?
aaa
bbb
q有几个动态变量,q行 set 看不?
%CD%                    #代表当前目录的字W串
%DATE%                  #当前日期
%TIME%                  #当前旉
%RANDOM%                #随机整数Q介?~32767
%ERRORLEVEL%            #当前 ERRORLEVEL ?
%CMDEXTVERSION%         #当前命o处理器扩展名版本?
%CMDCMDLINE%            #调用命o处理器的原始命o?
可以用echo命o查看每个变量|?echo %time%
注意 %time% _到毫U,在批处理需要g时处理时可以用到
32 start
批处理中调用外部E序的命令,否则{外部程序完成后才l执行剩下的指o
33 call
批处理中调用另外一个批处理的命令,否则剩下的批处理指o不会被执行
有时有的应用E序用start调用出错的,也可以call调用
34 choice (外部命o)
选择命o
让用戯入一个字W,从而选择q行不同的命令,q回码errorlevel?234…?
win98里是choice.com
win2000pro里没有,可以从win98里拷q来
win2003里是choice.exe
choice /N /C y /T 5 /D y>nul
延时5U?/pre>
																						
35 assoc ?ftype
文g兌
assoc 讄'文g扩展?兌Q关联到'文gcd'
ftype 讄'文gcd'兌Q关联到'执行E序和参?
当你双击一?txt文gӞwindowsq不是根?txt直接判断?notepad.exe 打开
而是先判?txt属于 txtfile '文gcd'
再调?txtfile 兌的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1
可以在\"文g多w项\"→\"文gcd\"里修改这2U关?/pre>
																						
assoc             #昄所?文g扩展?兌
assoc .txt        #昄.txt代表?文gcd'Q结果显C?.txt=txtfile
assoc .doc        #昄.doc代表?文gcd'Q结果显C?.doc=Word.Document.8
assoc .exe        #昄.exe代表?文gcd'Q结果显C?.exe=exefile
ftype             #昄所?文gcd'兌
ftype exefile     #昄exefilecd兌的命令行Q结果显C?exefile=\"%1\" %* 
assoc .txt=Word.Document.8
讄.txt为wordcd的文,可以看到.txt文g的图标都变了
assoc .txt=txtfile
恢复.txt的正关?
 
ftype exefile=\"%1\" %*
恢复 exefile 的正关?
如果该关联已l被破坏Q可以运?command.com Q再输入q条命o
																								36 pushd ?popd
切换当前目录
																						
@echo off
c: & cd\ & md mp3         #?C:\ 建立 mp3 文g?
md d:\mp4                 #?D:\ 建立 mp4 文g?
cd /d d:\mp4              #更改当前目录?d:\mp4
pushd c:\mp3              #保存当前目录Qƈ切换当前目录?c:\mp3
popd                      #恢复当前目录为刚才保存的 d:\mp4
																								37 for
循环命o
																						
q个比较复杂Q请对照 for/? 来看
for %%i in (c: d: e: f:) do echo %%i
依次调用括号里的每个字W串Q执?do 后面的命?
注意%%iQ在批处理中 for 语句调用参数??
默认的字W串分隔W是\"I格键\"Q\"Tab键\"Q\"回R键\"
for %%i in (*.txt) do find \"abc\" %%i
对当前目录里所有的txt文g执行 find 命o
for /r . %%i in (*.txt) do find \"abc\" %%i
在当前目录和子目录里所有的.txt文g中搜索包?abc 字符串的?/pre>
																						
for /r . %%i in (.) do echo %%~pni
昄当前目录名和所有子目录名,包括路径Q不包括盘符
for /r d:\mp3 %%i in (*.mp3) do echo %%i>>d:\mp3.txt
?d:\mp3 及其子目录里的mp3文g的文件名都存?d:\mp3.txt 里去
for /l %%i in (2,1,8) do echo %%i
生成2345678的一串数字,2是数字序列的开_8是结,1表示每次?
for /f %%i in ('set') do echo %%i
?set 命o的输出结果@环调用,每行一?/pre>
																						
for /f \"eol=P\" %%i in ('set') do echo %%i
?set 命o的输出结果,忽略?P 开头的那几?/pre>
																						
for /f %%i in (d:\mp3.txt) do echo %%i
昄 d:\mp3.txt 里的每个文g名,每行一个,不支持带I格的名U?/pre>
																						
for /f \"delims=\" %%i in (d:\mp3.txt) do echo %%i
昄 d:\mp3.txt 里的每个文g名,每行一个,支持带空格的名称
for /f \"skip=5 tokens=4\" %%a in ('dir') do echo %%a
?dir 命o的结果,跌前面5行,余下的每行取W??
每列之间的分隔符为默认的\"I格\"
可以注意?dir 命o输出的前5行是没有文g名的
for /f \"tokens=1,2,3 delims=- \" %%a in ('date /t') do (
      echo %%a
      echo %%b
      echo %%c
      )
?date /t 的输出结果,每行????
W一列对应指定的 %%a Q后面的 %%b ?%%c 是派生出来的Q对应其它列
分隔W指定ؓ - 和\"I格\"Q注?delims=- 后面有个\"I格\"
其中 tokens=1,2,3 若用 tokens=1-3 替换Q效果是一L
for /f \"tokens=2* delims=- \" %%a in ('date /t') do echo %%b
取第2列给 %%a Q其后的列都l?%%b
32 subst (外部命o)
映射盘?/pre>
																						
subst z: \server\d       #q样输入z:可以访?a>\server\d?
subst z: /d               #取消该映?
subst                     #昄目前所有的映时
38    xcopy (外部命o)
文g拯
xcopy d:\mp3 e:\mp3 /s/e/i/y
复制 d:\mp3 文g夏V所有子文g夹和文g?e:\ Q覆盖已有文?
?/i 表示如果 e:\ 没有 mp3 文g夹就自动新徏一个,否则会有询问


BirdsHover 2008-11-28 18:22 发表评论
]]>
Raw Socket 之HTTPQ效果不理想http://www.shnenglu.com/birdshover/archive/2008/11/10/66526.htmlBirdsHoverBirdsHoverMon, 10 Nov 2008 08:43:00 GMThttp://www.shnenglu.com/birdshover/archive/2008/11/10/66526.htmlhttp://www.shnenglu.com/birdshover/comments/66526.htmlhttp://www.shnenglu.com/birdshover/archive/2008/11/10/66526.html#Feedback2http://www.shnenglu.com/birdshover/comments/commentRss/66526.htmlhttp://www.shnenglu.com/birdshover/services/trackbacks/66526.html
// stdafx.h : 标准pȝ包含文g的包含文Ӟ
// 或是l常使用但不常更改的
// 特定于项目的包含文g
//

#pragma once

#include 
"targetver.h"

#include 
<stdio.h>
#include 
<tchar.h>
#include 
<iostream> 

using namespace std;

typedef unsigned 
short USHORT;
typedef unsigned 
char UCHAR;

#define URG 0x20 
#define ACK 0x10 
#define PSH 0x08 
#define RST 0x04 
#define SYN 0x02 
#define FIN 0x01 

typedef 
struct ip_hdr //定义IP首部 

    unsigned 
char h_verlen; //4位首部长?4位IP版本号?/span>
    unsigned char tos; //8位服务类型TOS 
    unsigned short total_len; //16位总长度(字节Q?/span>
    unsigned short ident; //16位标识?/span>
    unsigned short frag_and_flags; //3位标志位 
    unsigned char ttl; //8位生存时闾bTTL 
    unsigned char proto; //8位协议?TCP, UDP 或其? 
    unsigned short checksum; //16位IP首部校验和?/span>
    unsigned int sourceIP; //32位源IP地址 
    unsigned int destIP; //32位目的IP地址 
}IPHEADER; 

typedef 
struct tsd_hdr //定义TCP伪首部?/span>

    unsigned 
long saddr; //源地址 
    unsigned long daddr; //目的地址 
    char mbz; 
    
char ptcl; //协议cd 
    unsigned short tcpl; //TCP长度 
}PSDHEADER; 

typedef 
struct tcp_hdr //定义TCP首部 

    USHORT th_sport; 
//16位源端口 
    USHORT th_dport; //16位目的端口?/span>
    unsigned int th_seq; //32位序列号 
    unsigned int th_ack; //32位确认号 
    unsigned char th_lenres; //4位首部长?6位保留字 
    unsigned char th_flag; //6位标志位 
    USHORT th_win; //16位窗口大?/span>
    USHORT th_sum; //16位校验和 
    USHORT th_urp; //16位紧急数据偏U量 
}TCPHEADER; 





// TODO: 在此处引用程序需要的其他头文?br />

#include "StdAfx.h"
#include 
"HttpWeb.h"

#include 
<winsock2.h> 
#include 
<ws2tcpip.h> 
#pragma comment(lib,
"ws2_32.lib")  
#define winsock_version 0x0101

//CheckSum:计算校验和的子函敊W?/span>
USHORT HttpWeb::checksum(USHORT *buffer, int size) 

    unsigned 
long cksum=0
    
while(size >1
    { 
        cksum 
+= *buffer++
        size 
-= sizeof(USHORT); 
    } 
    
if(size) 
    { 
        cksum 
+= *(UCHAR*)buffer; 
    } 

    cksum 
= (cksum >> 16+ (cksum & 0xffff); 
    cksum 
+= (cksum >>16); 
    
return (USHORT)(~cksum); 
};

HttpWeb::HttpWeb(
void)
{
}

HttpWeb::
~HttpWeb(void)
{
}

void UseAge()
{
    printf(
"********************************************************************\n"); 
    printf(
"Vote For yeshj\n"); 
    printf(
"\t Written by yurow\n"); 
    printf(
"\t Email: yurow@163.com\n"); 
    printf(
"\t Blog: birdshover.cnblogs.com\n"); 
    printf(
"Useage: sniffer ip to vote\n"); 
    printf(
"********************************************************************\n"); 
}

bool HttpWeb::Post(char host[], char path[], char parms[],int port)
{
    UseAge();

    WSADATA WSAData; 
    SOCKET sock;
    SOCKADDR_IN addr_in; 
    IPHEADER ipHeader; 
    TCPHEADER tcpHeader; 
    PSDHEADER psdHeader; 

    
char szSendBuf[4000= {0}; 
    BOOL flag;
    
int rect,nTimeOver; 
    
if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0
    {
        printf(
"WSAStartup Error!\n"); 
        
return false
    }

    
if ((sock = WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET) 
    {
        printf(
"Socket Setup Error!\n"); 
        
return false
    }

    flag
=true
    
if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag)) == SOCKET_ERROR) 
    { 
        printf(
"setsockopt IP_HDRINCL error!\n"); 
        
return false
    } 

    nTimeOver
=1000
    
if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver)) == SOCKET_ERROR) 
    { 
        printf(
"setsockopt SO_SNDTIMEO error!\n"); 
        
return false
    } 

    
char requestString[4000= {0};
    
if(strlen(parms) > 0)
        strcat(requestString,
"POST ");
    
else
        strcat(requestString,
"GET ");
    strcat(requestString,path);
    strcat(requestString,
" HTTP/1.1\r\n");
    strcat(requestString,
"Host: ");
    strcat(requestString,host);
    strcat(requestString,
"\r\nAccept: */*\r\n");
    strcat(requestString,
"Accept-Language: zh-cn\r\n");
    strcat(requestString,
"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0;)\r\n");
    strcat(requestString,
"Accept-Encoding: gzip, deflate\r\n");
    strcat(requestString,
"Connection: Keep-Alive\r\n");
    
    
if(strlen(parms) > 0){
        strcat(requestString,
"Content-Type: application/x-www-form-urlencoded\r\n");
        strcat(requestString,
"Content-Length: ");
        
char * p = new char[4];
        itoa(strlen(parms),p,
10);   
        strcat(requestString,p);
        strcat(requestString,
"\r\n\r\n");
        strcat(requestString,parms);
        strcat(requestString,
"\r\n\r\n");
    }
    cout 
<< requestString;

    
int postDataLength = strlen(requestString);
    LPHOSTENT lphostent 
= gethostbyname(host);
    
    
    addr_in.sin_family 
= AF_INET; 
    addr_in.sin_port 
= htons(port); 
    
//addr_in.sin_addr= *((LPIN_ADDR)*lphostent->h_addr_list); 
    addr_in.sin_addr = *(in_addr *)lphostent->h_addr_list[0]; 
    
//填充IP首部 
    ipHeader.h_verlen=4<<4 | sizeof(ipHeader)/sizeof(unsigned long)); 
    
//ipHeader.tos=0; 
    ipHeader.total_len = htons(sizeof(ipHeader) + sizeof(tcpHeader)); 
    ipHeader.ident
=1
    ipHeader.frag_and_flags
=0
    ipHeader.ttl 
= 128
    ipHeader.proto 
= IPPROTO_TCP; 
    ipHeader.checksum 
= 0
    ipHeader.sourceIP 
= inet_addr("192.168.19.1"); 
    ipHeader.destIP 
= addr_in.sin_addr.S_un.S_addr;

    
//填充TCP首部 
    tcpHeader.th_dport = htons(port);  //目标端口
    tcpHeader.th_sport=htons(4000); //源端口号 
    tcpHeader.th_seq = htonl(0x12345678); 
    tcpHeader.th_ack
=0
    tcpHeader.th_lenres 
= (sizeof(tcpHeader) / 4 <<4| 0); 
    tcpHeader.th_flag 
= 2//修改q里来实C同的标志位探,2是SYNQ?是FINQ?6是ACK探测 {等 
    tcpHeader.th_win= htons(512); 
    tcpHeader.th_urp
=0
    tcpHeader.th_sum
=0

    psdHeader.saddr 
= ipHeader.sourceIP; 
    psdHeader.daddr 
= ipHeader.destIP; 
    psdHeader.mbz 
= 0
    psdHeader.ptcl 
= IPPROTO_TCP; 
    psdHeader.tcpl 
= htons(sizeof(tcpHeader)); 


    
//计算校验和?/span>
    memcpy(szSendBuf, &psdHeader, sizeof(psdHeader)); 
    memcpy(szSendBuf
+sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader)); 
    tcpHeader.th_sum
=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader)); 

    memcpy(szSendBuf, 
&ipHeader, sizeof(ipHeader)); 
    memcpy(szSendBuf
+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader)); 
    memset(szSendBuf
+sizeof(ipHeader)+sizeof(tcpHeader), 04); 
    ipHeader.checksum
=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader)); 

    memcpy(szSendBuf, 
&ipHeader, sizeof(ipHeader)); 

    memcpy(szSendBuf 
+ sizeof(ipHeader)+sizeof(tcpHeader),requestString,postDataLength);

    cout 
<< szSendBuf << endl;

    rect
=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader) + postDataLength, 0, (struct sockaddr*)&addr_in, sizeof(addr_in)); 
    
    cout 
<< rect << "\t" << sizeof(ipHeader) + sizeof(tcpHeader) + postDataLength << endl;
    
    
if (rect == SOCKET_ERROR || rect > 10000L
    { 
        printf(
"send error!:%d\n",WSAGetLastError()); 
        
return false
    } 
    
else 
        printf(
"send ok!\n"); 

    closesocket(sock); 
    WSACleanup(); 

    
return false;
}



BirdsHover 2008-11-10 16:43 发表评论
]]>
TCP/IP 头分?/title><link>http://www.shnenglu.com/birdshover/archive/2008/11/07/66224.html</link><dc:creator>BirdsHover</dc:creator><author>BirdsHover</author><pubDate>Fri, 07 Nov 2008 09:37:00 GMT</pubDate><guid>http://www.shnenglu.com/birdshover/archive/2008/11/07/66224.html</guid><wfw:comment>http://www.shnenglu.com/birdshover/comments/66224.html</wfw:comment><comments>http://www.shnenglu.com/birdshover/archive/2008/11/07/66224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/birdshover/comments/commentRss/66224.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/birdshover/services/trackbacks/66224.html</trackback:ping><description><![CDATA[一ơ向baidu发送的httph<br /><br /><b>IP?br /><br /></b>45 00 00 28 00 f6 40 00 40 06 84 46 c0 a8 12 23 dc b5 06 13<br /><br />45 —?4代表IP4版本Q?0代表IP头长?0Q?br />00 —?8?代表服务cdQ定义了数据传输的优先、gq、吞吐量和可靠性等Ҏ(gu)?br /><blockquote><blockquote><blockquote><blockquote>8个BIT的含义是Q?<br /><br />000 前三位不?<br /><br />0 表示最时Ӟ如Telnet服务使用该位 <br /><br />0 表示吞吐量,如FTP服务使用该位 <br /><br />0 表示可靠性,如SNMP服务使用该位 <br /><br />0 表示最代?<br /><br />0 不用 <br /></blockquote></blockquote></blockquote></blockquote>00 28 —?总长?0字节<br />00 f6 —?IP包标识,L使用它唯一定每个发送的数据?<br />40 00 —?表示片标志,?个BIT。各位含义分别ؓQ第一个?”不用,W二个?”ؓ分片标志位,?”表C分片,?”表CZ分版本。第三个0为是否最后一片标志位Q?表示最后一片,1表示q有更多的片? 表示片偏UMؓ0个Bytes。该部分?3个BIT?<br />40 —?表示生存旉TTLgؓ40,该部分占8个BIT?<br />06 —?6QTCPQ,表示协议cd为TCPQ协议代码是6。如果是UDP协议Q则此处的协议代码应?7。如果是ICMP协议Q则此处的协议代码应?。该部分?个BIT? <br /><br />84 46 —?表示IP包头校验和ؓQ括号内的Correct表示此IP数据包是正确的,没有被非法修改过。该部分?6个BITQ用十六q制表示?<br /><br />c0 a8 12 23 —?源IP地址<br />dc b5 06 13 —?指向IP地址<br /><br /><b>TCP头信?/b><br />04 0f 00 50 3e e1 60 31 ee 34 89 49 50 10 20 00 bf 50 00 00<br /><br />04 0f —?端口 1039<br />00 50 —?80端口<br />3e e1 60 31 —?表示初始q接的请求号Q即SEQ倹{该部分?2个BITQg1??2ơ方??br />            —?Ҏ(gu)应答也应该是q个?br />ee 34 89 49 —?响应?br />50 —?数据偏移<br />10 —?标记 Q该值用两个十六q制数来表示。该部分长度?个BITQ?个标志位的含义分别是Q?br /><blockquote>0 URGQ紧急数据标志,?表示有紧急数据,应立卌行传递?<br /><br />0 ACKQ确认标志位Qؓ1表示此数据包为应{数据包 <br /><br />0 PSHQPUSH标志位,?表示此数据包应立卌行传递?<br /><br />0 RSTQ复位标志位。如果收C属于本机的数据包Q则q回一个RST <br /><br />0 SYNQ连接请求标志位。ؓ1表示为发赯接的h数据包?<br /><br />0 FINQ结束连接请求标志位。ؓ1表示是结束连接的h数据包? <br /></blockquote>20 00 —?表示H口Q该部分?6个BIT?<br />bf 50 —?表示校验和。该部分?6个BITQ用十六q制表示?br />00 00 —?表示紧急指针ؓ0。该部分?6个BIT?<br /><br />DLC的头和结֜raw socket中不用设|?br /><br />Http报文问题?br /><br />在一ơHTTPh中,?紧急指?l束后,跟了 608 字节的Http Header<br /><br />47 45 54 20 2f 69 6d 67 2f 62 61 69 64 75 5f 6c 6f 67 6f 2e 67 69 66 20 48 54 54 50 2f 31 2e 31 0d 0a 41 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 52 65 66 65 72 65 72 3a 20 68 74 74 70 3a 2f 2f 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d 2f 0d 0a 41 63 63 65 70 74 2d 4c 61 6e 67 75 61 67 65 3a 20 7a 68 2d 63 6e 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 34 2e 30 20 28 63 6f 6d 70 61 74 69 62 6c 65 3b 20 4d 53 49 45 20 38 2e 30 3b 20 57 69 6e 64 6f 77 73 20 4e 54 20 35 2e 32 3b 20 54 72 69 64 65 6e 74 2f 34 2e 30 3b 20 2e 4e 45 54 20 43 4c 52 20 31 2e 31 2e 34 33 32 32 3b 20 2e 4e 45 54 20 43 4c 52 20 32 2e 30 2e 35 30 37 32 37 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 30 2e 30 34 35 30 36 2e 36 34 38 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 35 2e 32 31 30 32 32 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 30 2e 34 35 30 36 2e 32 31 35 32 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 35 2e 33 30 37 32 39 29 0d 0a 55 41 2d 43 50 55 3a 20 78 38 36 0d 0a 41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 67 7a 69 70 2c 20 64 65 66 6c 61 74 65 0d 0a 49 66 2d 4d 6f 64 69 66 69 65 64 2d 53 69 6e 63 65 3a 20 57 65 64 2c 20 33 30 20 4a 75 6c 20 32 30 30 38 20 31 30 3a 32 33 3a 30 30 20 47 4d 54 0d 0a 49 66 2d 4e 6f 6e 65 2d 4d 61 74 63 68 3a 20 22 35 64 31 2d 34 38 39 30 34 31 30 34 22 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 4b 65 65 70 2d 41 6c 69 76 65 0d 0a 43 6f 6f 6b 69 65 3a 20 42 41 49 44 55 49 44 3d 38 45 38 34 31 39 36 35 32 43 32 38 43 34 31 44 37 41 35 44 34 42 42 32 35 32 34 36 31 33 32 32 3a 46 47 3d 31 3b 20 42 44 53 54 41 54 3d 36 62 39 64 65 66 35 36 38 32 37 61 38 35 34 33 33 30 34 65 32 35 31 66 39 35 63 61 64 31 63 38 61 37 38 36 63 39 31 37 37 66 33 65 36 37 30 39 63 39 33 64 37 30 63 66 33 61 63 37 39 33 33 64 0d 0a 0d 0a<br /><br />接下来要试试 Raw Socket发送HTTP报文了?br /><br /><br /><img src ="http://www.shnenglu.com/birdshover/aggbug/66224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/birdshover/" target="_blank">BirdsHover</a> 2008-11-07 17:37 <a href="http://www.shnenglu.com/birdshover/archive/2008/11/07/66224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搞不清楚状况QStack around the variable 'dest' was corrupted.http://www.shnenglu.com/birdshover/archive/2008/11/05/66043.htmlBirdsHoverBirdsHoverWed, 05 Nov 2008 08:55:00 GMThttp://www.shnenglu.com/birdshover/archive/2008/11/05/66043.htmlhttp://www.shnenglu.com/birdshover/comments/66043.htmlhttp://www.shnenglu.com/birdshover/archive/2008/11/05/66043.html#Feedback1http://www.shnenglu.com/birdshover/comments/commentRss/66043.htmlhttp://www.shnenglu.com/birdshover/services/trackbacks/66043.html
搞不清楚Z么GET方式没效果,而POST有效果,却提C“Run-Time Check Failure #2 - Stack around the variable 'dest' was corrupted.?br />好晕倒啊Q!老衲没办法了Q毕竟对com不熟。记下状况以后来研究研究?br />
#include "Visitor.h"

#include 
<stdio.h>
#include 
<iostream>
#include 
"winsock.h" 
#pragma comment(lib,
"ws2_32.lib")  
#define winsock_version 0x0101

using  namespace  std;

#include 
"URL.h";

Visitor::Visitor(
void)
{
}

Visitor::
~Visitor(void)
{
}

char * Visitor::POST(char * host,char* pathAndQuery, char * parms)
{
    
char * requestString = new char[4000];
    memset(requestString,
0,4000);
    
if(strlen(parms) > 0)
        strcat(requestString,
"POST ");
    
else
        strcat(requestString,
"GET ");
    strcat(requestString,pathAndQuery);
    strcat(requestString,
" HTTP/1.1\r\n");
    strcat(requestString,
"Host: ");
    strcat(requestString,host);
    
    strcat(requestString,
"\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n");
    strcat(requestString,
"Accept-Language: zh-cn,zh;q=0.5\r\n");
    strcat(requestString,
"User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648;\r\n");
    strcat(requestString,
"UA-CPU: x86\r\n");
    strcat(requestString,
"Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7\r\n");
    
//strcat(requestString,"Accept-Encoding: gzip, deflate\r\n");
    strcat(requestString,"Connection: Keep-Alive\r\n");
    
    
if(strlen(parms) > 0){
        strcat(requestString,
"Content-Type: application/x-www-form-urlencoded\r\n");
        strcat(requestString,
"Content-Length: ");
        
char * p = new char[4];
        itoa(strlen(parms),p,
10);   
        strcat(requestString,p);
        strcat(requestString,
"\r\n\r\n");
        strcat(requestString,parms);
    }
    
//cout << requestString;

    WSADATA wsadata;
    LPHOSTENT lphostent; 
    SOCKET hsocket;
    SOCKADDR_IN saServer;
    
int nRet;
    
if(WSAStartup(winsock_version,&wsadata))
    {
        
    }
    lphostent 
= gethostbyname(host);
    hsocket 
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    saServer.sin_family 
= AF_INET;
    saServer.sin_port 
= htons(80);
    saServer.sin_addr 
= *((LPIN_ADDR)*lphostent->h_addr_list);
    nRet 
= connect(hsocket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
    nRet 
= send(hsocket, requestString, strlen(requestString), 0); 
    
char dest[1000];
    nRet
=1;   
    
int bytes = 0;
    
while(nRet>0)  
    {
        nRet 
= recv(hsocket,(LPSTR)dest,sizeof(dest),0);
        
if(nRet > 0)   
            dest[nRet] 
= 0;   
        
else{
            
//dest[0] = 0;  
            break;
        }
        
//printf("\nReceived   bytes:%d\n",nRet);   
        try{
        cout 
<< dest;
        }
catch(exception ex){}
        bytes 
+= nRet;
    }
    closesocket(hsocket);
    
//delete []dest;
    printf("\nReceived   bytes:%d\n",bytes);   
    delete requestString;
    
return "";
}



BirdsHover 2008-11-05 16:55 发表评论
]]>
þþþһƷɫ| ۺϾþþþþ| þóۺɫۺ| ˶ݺɫۺϾþ| þۺƵվ| þþþƷ޳18վ | ҹҹݺݾþö | ξþ99ƷþþþþС˵| ۺϾþĻӰ| þþþAVۺϲҰ| ɫۺϾþþþһ| ŷ777Ʒþþþ| þۺϸۺϾþ| ŷ޳ҹƷþ | ˾þþƷһ| þľƷĻ| ŷһþþƷ޾Ʒþþþ | 91þþһȫ| ƷŷþþþӰ| þþþþþž99Ʒ| þþùһ| AëƬþ| þþƷˮavۺ| þþþþѹۿ| ˾þƵ| 99þþƷҹһ| պһþ | ޾Ʒһۺ99þ| þþƷһ| þۺϾƷþ| 97Ʒ˾þþô߽| 99þۺϺݺۺϾþֹ| þѵľƷV| ˾þվ| þþþƷ| þþƷĻһ| þۺϹapp| ۺɫ77777þ| ޾Ʒһþþ | Ʒþ| 91Ʒ91þþþø|