锘??xml version="1.0" encoding="utf-8" standalone="yes"?>在线观看国产欧美,国产精品入口麻豆原神,欧美成年人在线观看http://m.shnenglu.com/jjbird/category/704.html濂囧鐨勭┖闂?/description>zh-cnTue, 20 May 2008 08:00:39 GMTTue, 20 May 2008 08:00:39 GMT60澶氬睆緙栫▼涔嬪浣曡幏鍙栨樉鍗′俊鎭垽鏂槸鍚︿負澶氬睆http://m.shnenglu.com/jjbird/articles/15701.html濂囧濂囧Mon, 27 Nov 2006 08:18:00 GMThttp://m.shnenglu.com/jjbird/articles/15701.htmlhttp://m.shnenglu.com/jjbird/comments/15701.htmlhttp://m.shnenglu.com/jjbird/articles/15701.html#Feedback0http://m.shnenglu.com/jjbird/comments/commentRss/15701.htmlhttp://m.shnenglu.com/jjbird/services/trackbacks/15701.html
鍦╯tdafx.h
涓姞鍏ワ細
#undef WINVER
#define WINVER 0x0500

*************************************************************

#ifndef SM_CMONITORS

typedef HANDLE HMONITOR;

#endif
#ifndef DISPLAY_DEVICE_PRIMARY_DEVICE

typedef struct _DISPLAY_DEVICE {
DWORD cb;
TCHAR DeviceName[32];
TCHAR DeviceString[128];
DWORD StateFlags;
} DISPLAY_DEVICE, *PDISPLAY_DEVICE, *LPDISPLAY_DEVICE;
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
#define DISPLAY_DEVICE_MULTI_DRIVER 0x00000002
#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004
#define DISPLAY_DEVICE_VGA 0x00000010

#endif

typedef BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
typedef BOOL (WINAPI* pEnumDisplaySettings)(PVOID,DWORD,PVOID);

pEnumDisplayDevices pStartEnumDisplayDevices;
pEnumDisplaySettings pStartEnumDisplaySettings;


*********************************************************************


int iCount;

pStartEnumDisplayDevices = (pEnumDisplayDevices)GetProcAddress(LoadLibrary("USER32"), "EnumDisplayDevicesA");
pStartEnumDisplaySettings = (pEnumDisplaySettings)GetProcAddress(LoadLibrary("USER32"), "EnumDisplaySettingsA");


if (pStartEnumDisplayDevices && pStartEnumDisplaySettings)
{
DISPLAY_DEVICE dd;
DEVMODE dv;

ZeroMemory(&dv, sizeof(dv));
ZeroMemory(&dd, sizeof(dd));

dv.dmSize = sizeof(dv);
dd.cb = sizeof(dd);

for (iCount=0; (*pStartEnumDisplayDevices)(NULL, iCount, &dd, 0); iCount++)
{
(*pStartEnumDisplaySettings)(dd.DeviceName,ENUM_CURRENT_SETTINGS,&dv);
if((dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
&&(dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
{
CString strDispName,strScreen,strColor,strFreq;

strDispName.Format(_T("Device Name: %s "),dd.DeviceString);
SetDlgItemText(IDC_STATIC_DISP_NAME,strDispName);

strScreen.Format(_T("%d脳%d "),dv.dmPelsWidth,dv.dmPelsHeight);
SetDlgItemText(IDC_STATIC_FREQ,strScreen);

strColor.Format(_T("%d Bit"),dv.dmBitsPerPel);
SetDlgItemText(IDC_STATIC_COLOR,strColor);

strFreq.Format(_T("%d Hz"),dv.dmDisplayFrequency);
SetDlgItemText(IDC_STATIC_REFRESH_FREQ,strFreq);
}
}
}


濂囧 2006-11-27 16:18 鍙戣〃璇勮
]]>
iocore 榪炵畫榪愯21澶╁悗鍑洪敊闂鐨勫垎鏋?/title><link>http://m.shnenglu.com/jjbird/articles/15292.html</link><dc:creator>濂囧</dc:creator><author>濂囧</author><pubDate>Fri, 17 Nov 2006 05:08:00 GMT</pubDate><guid>http://m.shnenglu.com/jjbird/articles/15292.html</guid><wfw:comment>http://m.shnenglu.com/jjbird/comments/15292.html</wfw:comment><comments>http://m.shnenglu.com/jjbird/articles/15292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/jjbird/comments/commentRss/15292.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/jjbird/services/trackbacks/15292.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US">iocore </span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">榪炵畫榪愯</span> <span lang="EN-US">21</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">澶╁悗紼嬪簭鍑洪敊錛屽湴鍧涓?/span> <span lang="EN-US">0X10212AD0</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">錛屾姤閿欎負</span> <span lang="EN-US">鈥渦nknown聽聽software聽聽exception聽聽(0X80000003),</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">浣嶇疆涓?/span> <span lang="EN-US">0X10212AD0鈥?/span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">錛岀粡榪囧垎鏋愪負</span> <span lang="EN-US">new</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">璋冪敤鏃跺嚭閿欙紝</span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US"> <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?> <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"> </v:stroke> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> </v:f> <v:f eqn="sum @0 1 0"> </v:f> <v:f eqn="sum 0 0 @1"> </v:f> <v:f eqn="prod @2 1 2"> </v:f> <v:f eqn="prod @3 21600 pixelWidth"> </v:f> <v:f eqn="prod @3 21600 pixelHeight"> </v:f> <v:f eqn="sum @0 0 1"> </v:f> <v:f eqn="prod @6 1 2"> </v:f> <v:f eqn="prod @7 21600 pixelWidth"> </v:f> <v:f eqn="sum @8 21600 0"> </v:f> <v:f eqn="prod @7 21600 pixelHeight"> </v:f> <v:f eqn="sum @10 21600 0"> </v:f> </v:formulas> <v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"> </v:path> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:lock aspectratio="t" v:ext="edit"> </o:lock> </v:shapetype> <v:shape id="_x0000_i1025" style="WIDTH: 303pt; HEIGHT: 105pt" o:ole="" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image001.png"> </v:imagedata> </v:shape> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">璺熻釜紼嬪簭鍒?/span> <span lang="EN-US">_heap_alloc_dbg</span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="COLOR: #115e94; FONT-FAMILY: Tahoma">void * __cdecl _heap_alloc_dbg(<br />聽 聽 聽 聽 size_t nSize,<br />聽 聽 聽 聽 int nBlockUse,<br />聽 聽 聽 聽 const char * szFileName,<br />聽 聽 聽 聽 int nLine<br />聽 聽 聽 聽 )<br />{<br />聽 聽 聽 聽 long lRequest;<br />聽 聽 聽 聽 size_t blockSize;<br />聽 聽 聽 聽 int fIgnore = FALSE;<br />聽 聽 聽 聽 _CrtMemBlockHeader * pHead;<br /><br />聽 聽 聽 聽 /* verify heap before allocation */<br />聽 聽 聽 聽 if (_crtDbgFlag & _CRTDBG_CHECK_ALWAYS_DF)<br />聽 聽 聽 聽 聽 聽 _ASSERTE(_CrtCheckMemory());<br /><br />聽 聽 聽 聽 lRequest = _lRequestCurr;<br /><br />聽 聽 聽 聽 /* break into debugger at specific memory allocation */<br />聽 聽 聽 聽 if (lRequest == _crtBreakAlloc)<br />聽 聽 聽 聽 聽 聽 _CrtDbgBreak();<br />// here is the place were the app stops<br /><br />// ... function continuous<br style="mso-special-character: line-break" /><br style="mso-special-character: line-break" /><o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="COLOR: #115e94; FONT-FAMILY: Tahoma">聽<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">_crtBreakAlloc </span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">涓?/span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">-1</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">銆?/span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">lRequest</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">涓?/span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">long</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">鍨嬶紝姣?/span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">new</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">涓嬈★紝</span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">_lRequestCurr</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">姣忚皟鐢ㄤ竴嬈?/span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">new</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">錛岃嚜鍔ㄥ姞</span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">1</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">錛屽綋</span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">2147483647</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">鍐嶅姞</span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">1</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">鍙樻垚</span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">-2147483648</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">錛屼竴鐩寸瘡鍔犲埌</span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">-1</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">錛岀劧鍚庤皟鐢?/span> <span lang="EN-US" style="FONT-FAMILY: Tahoma">_CrtDbgBreak()</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">錛屽嚭閿欍傜湅浼兼槸榪欎釜鍘熷洜錛屼負浜嗚繘涓姝ョ‘璁わ紝緙栧啓嫻嬭瘯紼嬪簭</span> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">class AA<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">{<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 1">聽聽聽聽聽聽 </span>char aa1[10];<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 1">聽聽聽聽聽聽 </span>char aa2[12];<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">};<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">聽<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">int main(int argc, char* argv[])<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">{<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 1">聽聽聽聽聽聽 </span>AA *pp;<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 1">聽聽聽聽聽聽 </span>while(1)<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 1">聽聽聽聽聽聽 </span>{<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 2">聽聽聽聽聽聽聽聽聽聽聽聽聽 </span>pp=new AA;<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 2">聽聽聽聽聽聽聽聽聽聽聽聽聽 </span>delete pp;<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma"> <span style="mso-tab-count: 1">聽聽聽聽聽聽 </span>}<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: Tahoma">}<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">鍑犱釜灝忔椂鍚庡鐜頒簡姝ょ幇璞°?/span> <br /> <br />緗戜笂鏌ユ壘<span lang="EN-US">0X10212AD0</span> 鏈夊涓嬬嚎绱細<br /><a >http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_21088390.html</a></p> <img src ="http://m.shnenglu.com/jjbird/aggbug/15292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/jjbird/" target="_blank">濂囧</a> 2006-11-17 13:08 <a href="http://m.shnenglu.com/jjbird/articles/15292.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓轟簡闃叉鍙戠敓鍐呭瓨娉勬紡欏婚伒寰殑緙栫▼瑙勮寖http://m.shnenglu.com/jjbird/articles/11602.html濂囧濂囧Wed, 23 Aug 2006 02:21:00 GMThttp://m.shnenglu.com/jjbird/articles/11602.htmlhttp://m.shnenglu.com/jjbird/comments/11602.htmlhttp://m.shnenglu.com/jjbird/articles/11602.html#Feedback0http://m.shnenglu.com/jjbird/comments/commentRss/11602.htmlhttp://m.shnenglu.com/jjbird/services/trackbacks/11602.html

濂囧 2006-08-23 10:21 鍙戣〃璇勮
]]>
VC Studio 浣跨敤鎶宸с乂C欏圭洰鏂囦歡璇存槑http://m.shnenglu.com/jjbird/articles/11597.html濂囧濂囧Wed, 23 Aug 2006 01:02:00 GMThttp://m.shnenglu.com/jjbird/articles/11597.htmlhttp://m.shnenglu.com/jjbird/comments/11597.htmlhttp://m.shnenglu.com/jjbird/articles/11597.html#Feedback0http://m.shnenglu.com/jjbird/comments/commentRss/11597.htmlhttp://m.shnenglu.com/jjbird/services/trackbacks/11597.html 1.媯嫻嬬▼搴忎腑鐨勬嫭鍙鋒槸鍚﹀尮閰?/font> 聽 鎶婂厜鏍囩Щ鍔ㄥ埌闇瑕佹嫻嬬殑鎷彿錛堝澶ф嫭鍙穥}銆佹柟鎷彿[]銆佸渾鎷彿錛堬級鍜屽皷鎷彿<>錛夊墠闈紝閿叆蹇嵎閿淐trl錛媇鈥濄傚鏋滄嫭鍙峰尮閰嶆紜紝鍏夋爣灝辮煩鍒板尮閰嶇殑鎷彿澶勶紝鍚﹀垯鍏夋爣涓嶇Щ鍔紝騫朵笖鏈虹鍠囧彮榪樹細鍙戝嚭涓澹拌鍛婂0銆?/td> 2.鏌ョ湅涓涓畯錛堟垨鍙橀噺銆佸嚱鏁幫級鐨勫畯瀹氫箟 聽 鎶婂厜鏍囩Щ鍔ㄥ埌浣犳兂鐭ラ亾鐨勪竴涓畯涓婏紝灝辨瘮濡傝鏈甯歌鐨凞ECLARE_MAP_MESSAGE涓婃寜涓涓婩12(鎴栧彸閿彍鍗曚腑鐨凣o To Defition Of 鈥?,濡傛灉娌℃湁寤虹珛Browse files錛屼細鍑虹幇鎻愮ず瀵硅瘽妗嗭紝紜畾錛岀劧鍚庡氨浼氳煩鍒板畾涔夐偅浜涗笢瑗跨殑鍦版柟銆?/td> 3.鏍煎紡鍖栦竴孌典貢涓冨叓緋熺殑婧愪唬鐮?/font> 聽 閫変腑閭f婧愪唬鐮侊紝鎸堿TL+F8銆?/td> 4.鍦ㄧ紪杈戠姸鎬佷笅鍙戠幇鎴愬憳鍙橀噺鎴栧嚱鏁頒笉鑳芥樉紺?/font> 聽 鍒犻櫎璇ラ」鐩墿灞曞悕涓?ncb鏂囦歡錛岄噸鏂版墦寮璇ラ」鐩?/td> 5.濡備綍鏁寸悊ClassView瑙嗗浘涓ぇ閲忕殑綾?/font> 聽 鍙互鍦╟lassview 瑙嗗浘涓彸閿柊寤烘枃浠跺す錛坣ew folder錛夛紝鍐嶆妸鍏鋒湁鐩歌繎鎬ц川鐨勭被鎷栧埌瀵瑰簲鐨勬枃浠跺す涓紝浣挎暣涓鍥劇湅涓婂幓娓呮櫚鏄庝簡. 6.瀹氫綅棰勫鐞嗘寚瀹?/font> 鍦ㄦ簮鏂囦歡涓畾浣嶅厜鏍囧埌瀵圭О鐨?if, #endif,浣跨敤Ctrl+K. 7.濡備綍娣誨姞緋葷粺涓璍ib鍒板綋鍓嶉」鐩?/font> 聽 鍦≒roject | Settings | Link | Object/library modules錛氳緭鍏ib鍚嶇О錛屼笉鍚岀殑Lib涔嬮棿鐢ㄧ┖鏍兼牸寮. 8.濡備綍娣誨姞緋葷粺涓殑澶存枃浠?.h)鍒板綋鍓嶉」鐩? 聽 #include <FileName.h>,鍛婅瘔緙栬瘧鍒癡C緋葷粺鐩綍鍘繪壘;浣跨敤#include "FileName.h"錛屽憡璇夌紪璇戝湪褰撳墠鐩綍鎵? 9.濡備綍鍦⊿tudio浣跨敤姹囩紪璋冭瘯 聽 鍦╓orkBench鐨凞ebugger鐘舵佷笅鎸塁TRL+F7. 10.鎬庢牱澶勭悊ClassZiard鎵句笉鍒扮殑緋葷粺娑堟伅 聽 濡傛灉瑕佸湪ClassWizard涓鐞哤M_NCHITTEST絳夌郴緇熸秷鎭紝璇峰湪ClassWizard涓瑿lass Info欏典腑灝哅essage filter鏀逛負Window灝辨湁浜? 11.濡備綍騫插噣鐨勫垹闄や竴涓被 聽 鍏堜粠Workspace涓殑FileView涓垹闄ゅ搴旂殑.h鍜?cpp鏂囦歡,鍐嶅叧闂」鐩紝浠庡疄闄呯殑鏂囦歡澶逛腑鍒犻櫎瀵瑰簲鐨?h鍜?cpp鏂囦歡涓?clw鏂囦歡銆?/td> 12.濡傛灉璁╂帶鍒跺彴搴旂敤紼嬪簭鏀寔mfc綾誨簱 聽 鍙互鍦ㄦ帶鍒跺彴搴旂敤紼嬪簭涓璱nclude 鏉ュ紩鍏fc搴擄紝浣嗘槸鎺у埗鍙板簲鐢ㄧ▼搴忕己鐪佹槸鍗曠嚎紼嬬殑錛宮fc鏄綰跨▼鐨勶紝涓鴻В鍐寵鐭涚浘錛屽湪project setting->c/c++ 閫夐」錛岄夋嫨code generation,鍦╱se run-time library 涓嬫媺妗嗕腑閫夋嫨debug multithread銆?/td> 13.濡備綍姹夊寲鍙湁鍙墽琛屼唬鐮佺殑.exe 鏂囦歡 聽 鍦╪t 涓嬪埄鐢╲c open file 浠esources鏂瑰紡鎵撳紑*.exe 鏂囦歡錛岀洿鎺ヤ慨鏀硅祫婧愭枃浠訛紝鐒跺悗淇濆瓨鍗沖彲銆?/td> 闄勶細VC欏圭洰鏂囦歡璇存槑
.opt 宸ョ▼鍏充簬寮鍙戠幆澧冪殑鍙傛暟鏂囦歡銆傚宸ュ叿鏉′綅緗瓑淇℃伅錛?/td>
.aps (AppStudio File),璧勬簮杈呭姪鏂囦歡,浜岃繘鍒舵牸寮?涓鑸笉鐢ㄥ幓綆′粬.
.clw ClassWizard淇℃伅鏂囦歡,瀹為檯涓婃槸INI鏂囦歡鐨勬牸寮?鏈夊叴瓚e彲浠ョ爺絀朵竴涓?鏈夋椂鍊機lassWizard鍑洪棶棰?鎵嬪伐淇敼CLW鏂囦歡鍙互瑙e喅.濡傛灉姝ゆ枃浠朵笉瀛樺湪鐨勮瘽,姣忔鐢–lassWizard鐨勬椂鍊欑粯鎻愮ず浣犳槸鍚﹂噸寤?
.dsp (DeveloperStudio Project):欏圭洰鏂囦歡,鏂囨湰鏍煎紡,涓嶈繃涓嶇啛鎮夌殑璇濅笉瑕佹墜宸ヤ慨鏀?DSW(DeveloperStudio Workspace)鏄伐浣滃尯鏂囦歡,鍏朵粬鐗圭偣鍜孌SP宸笉澶?
.plg 鏄紪璇戜俊鎭枃浠?緙栬瘧鏃剁殑error鍜寃arning淇℃伅鏂囦歡錛堝疄闄呬笂鏄竴涓猦tml鏂囦歡錛?涓鑸敤澶勪笉澶?鍦═ools->Options閲岄潰鏈変釜閫夐」鍙互鎺у埗榪欎釜鏂囦歡鐨勭敓鎴?
.hpj (Help Project)鏄敓鎴愬府鍔╂枃浠剁殑宸ョ▼,鐢╩icrosfot聽 Help Compiler鍙互澶勭悊.
.mdp (Microsoft DevStudio Project)鏄棫鐗堟湰鐨勯」鐩枃浠?濡傛灉瑕佹墦寮姝ゆ枃浠剁殑璇?浼氭彁紺轟綘鏄惁杞崲鎴愭柊鐨凞SP鏍煎紡.
.bsc 鏄敤浜庢祻瑙堥」鐩俊鎭殑,濡傛灉鐢⊿ource Brower鐨勮瘽灝卞繀欏繪湁榪欎釜鏂囦歡.濡傛灉涓嶇敤榪欎釜鍔熻兘鐨勮瘽,鍙互鍦≒roject Options閲岄潰鍘繪帀Generate Browse Info File,鍙互鍔犲揩緙栬瘧閫熷害.
.map 鏄墽琛屾枃浠剁殑鏄犲儚淇℃伅綰綍鏂囦歡,闄ら潪瀵圭郴緇熷簳灞傞潪甯哥啛鎮?榪欎釜鏂囦歡涓鑸敤涓嶇潃.
.pch (Pre-Compiled File)鏄緙栬瘧鏂囦歡,鍙互鍔犲揩緙栬瘧閫熷害,浣嗘槸鏂囦歡闈炲父澶?
.pdb (Program Database)璁板綍浜嗙▼搴忔湁鍏崇殑涓浜涙暟鎹拰璋冭瘯淇℃伅,鍦ㄨ皟璇曠殑鏃跺欏彲鑳芥湁鐢?
.exp 鍙湁鍦ㄧ紪璇慏LL鐨勬椂鍊欐墠浼氱敓鎴?璁板綍浜咲LL鏂囦歡涓殑涓浜涗俊鎭?涓鑸篃娌′粈涔堢敤.
.ncb 鏃犵紪璇戞祻瑙堟枃浠?no compile browser)銆傚綋鑷姩瀹屾垚鍔熻兘鍑洪棶棰樻椂鍙互鍒犻櫎姝ゆ枃浠躲俠uild鍚庝細鑷姩鐢熸垚銆?/td>




濂囧 2006-08-23 09:02 鍙戣〃璇勮
]]>
鍩轟簬IP Multicast鐨勪紶杈撳拰瀹炵幇http://m.shnenglu.com/jjbird/articles/6334.html濂囧濂囧Wed, 26 Apr 2006 09:33:00 GMThttp://m.shnenglu.com/jjbird/articles/6334.htmlhttp://m.shnenglu.com/jjbird/comments/6334.htmlhttp://m.shnenglu.com/jjbird/articles/6334.html#Feedback1http://m.shnenglu.com/jjbird/comments/commentRss/6334.htmlhttp://m.shnenglu.com/jjbird/services/trackbacks/6334.html

鍩轟簬IP聽Multicast鐨勪紶杈撳拰瀹炵幇

鍛ㄦ壙鑺?姹織鍏?鍞愭槅 鏉滄枃


銆銆鎽樿錛氳璁″茍瀹炵幇浜嗕竴涓熀浜嶪P Multicast鎶鏈殑榪滅▼鏁板瓧闊寵棰戠洃鎺х郴緇燂紝鎻愬嚭浜嗗垎甯冨紡闊寵棰戞帴鍏ュ叡浜殑瑙e喅鏂規錛岃兘澶熸湁鏁堝湴鑺傜渷緗戠粶甯﹀錛涢拡瀵硅棰戙侀煶棰戣闊沖拰鎺у埗鏁版嵁鐨勪笉鍚屼紶杈撶壒鐐癸紝瀵瑰叾鎵閲囩敤鐨勪紶杈撴妧鏈綔浜嗚緇嗘帰璁紝緇欏嚭浜嗗叿浣撳疄鐜版柟娉曘?
銆銆鍏抽敭璇嶏細鐩戞帶緋葷粺 鍒嗗竷寮忔帴鍏ュ叡浜?緗戠粶浼犺緭 IP緇勬挱 Windows濂楁帴瀛?
銆銆闅忕潃璁$畻鏈虹綉緇滄妧鏈佸濯掍綋鎶鏈佽綆楁満瑙嗚涓庢ā寮忚瘑鍒妧鏈殑鍙戠嚂灝炬湇錛屼竴縐嶄互鏁板瓧鍖栥佹櫤鑳藉寲涓虹壒鐐圭殑澶氬獟浣撹繙紼嬫暟瀛楃洃鎺х郴緇熷簲榪愯岀敓錛屽嵆鍩轟簬IP鐨勬暟瀛楃洃鎺х郴緇燂紝瀹炵幇浜嗙敱浼犵粺鐨勬ā鎷熺洃鎺у埌鏁板瓧鐩戞帶璐ㄧ殑椋炶穬銆備笌浼犵粺鐨勬ā鎷熺洃鎺х郴緇熺浉姣旇緝錛屾暟瀛楄繙紼嬬洃鎺х郴緇熷嚑涓渶涓昏鐨勪紭鍔挎槸錛氬彲浠ュ熷姪緗戠粶瀹炵幇榪滅▼鐩戞帶錛涘湪榪滅▼涓嶅悓鍦扮偣鐨勫垎鎺т腑蹇冩垨鍚屼釜鍒嗘帶涓績鍙悓鏃惰皟鐪嬫煇涓涓垨鑰呭嚑涓洃鎺х幇鍦虹殑闊寵棰戞暟鎹紝浠庤屽疄鐜板垎甯冨紡鐨勯煶棰戦鎺ュ叆鍜岄煶瑙嗛鏁版嵁鍏變韓錛屽悓鏃訛紝鍙互涓庣洃鎺х幇鍦轟漢鍛樿繘琛屽璁詫紱鍙互瀵硅繙紼嬬洃鎺х幇鍦虹殑浜戝彴銆佹憚鍍忔満絳夊鍥磋澶囪繘琛屾帶鍒躲傝棰戙侀煶棰戠殑瀹炴椂銆佸垎甯冨紡浼犺緭鍙婃帶鍒舵寚浠ょ殑鍙潬浼犺緭鏄繙紼嬫暟瀛楃洃鎺х郴緇熺殑涓涓叧閿棶棰樸傛湰鏂囪璁″茍瀹炵幇浜嗚繙紼嬫暟瀛楅煶棰戦鐩戞帶緋葷粺錛岄噰鐢↖P Multicast鎶鏈綔涓哄垎甯冨紡闊寵棰戞墽鐫鍏ュ拰鍏變韓鐨勮В鍐蟲柟妗堬紝騫墮拡瀵硅棰戙侀煶棰戣闊沖拰鎺у埗鏁版嵁涓嶅悓鐨勭壒鐐癸紝瀵瑰叾鎵閲囩敤鐨勪笉鍚屼紶杈撴妧鏈繘琛屼簡鎺㈣錛岀粰鍑轟簡鍏蜂綋瀹炵幇鏂規硶銆?


銆銆1 緋葷粺鐨勬諱綋緇撴瀯


銆銆榪滅▼鐩戞帶緋葷粺涓鑸寘鎷笁閮ㄥ垎錛氬墠绔洃鎺х幇鍦恒侀氫俊璁懼鍜屽悗绔垎鎺т腑蹇冦傛暣涓郴緇熷熀浜嶤lient/Server錛堝鎴鋒満/鏈嶅姟鍣級妯″紡銆傛諱綋緇撴瀯濡傚浘1鎵紺恒?



銆銆錛?錛夊墠绔洃鎺х幇鍦虹敱鐩戞帶鐜板満涓繪満鍙婁竴浜涘鍥磋澶囩粍鎴愩傚鍥磋澶囧寘鎷憚鍍忔満銆佺數鍔ㄩ暅澶淬佷簯鍙般侀槻鎶ょ僵銆佺洃瑙嗗櫒銆佸鍔熻兘瑙g爜鍣ㄥ強鎶ヨ鍣ㄣ傜洃鎺х幇鍦轟富鏈鴻繍琛屽鎴峰墠绔蔣浠訛紝瀹炵幇瑙嗛銆侀煶棰戞暟鎹殑瀹炴椂閲囬泦銆佸帇緙┿佽В鍘嬬緝錛堥煶棰戯級錛堣棰戜紶杈?鍗曞悜鐨勶紝闊抽浼犺緭鏄弻鍚戠殑錛夊強鎵撳寘浼犻侊紱瀵瑰帇緙╃殑瑙嗭紙闊籌級棰戞暟鎹繘琛岀粡瀛樺偍錛堜篃鍙湪鍒嗚繎涓績榪涜錛夈傚瓨鍌ㄦ柟寮忎負寰幆瀛樺偍銆佸畾鏃跺瓨鍌ㄣ佹墜鍔ㄥ瓨鍌ㄥ強榪愬姩瑙嗛媯嫻嬪惎鍔ㄥ瓨鍌ㄣ傛帴鏀舵潵鑷垎鎺т腑蹇冪殑鎺у埗鎸囦護錛堜篃鍙湪鏈湴瀹炴柦錛夛紝瀵逛簯鍙板姩浣滐紙涓娿佷笅銆佸乏銆佸彸鍙婅嚜鍔級鐢靛姩闀滃ご鐨勪笁鍙彉錛堝厜鍦堛佺劍璺濆拰鑱氱劍錛夈?
銆銆錛?錛夐氫俊璁懼鏄寚鎵閲囩敤鐨勪紶杈撲俊閬撳拰鐩稿叧璁懼錛岄氫俊緗戠粶涓篖AN鍙奧AN銆?
銆銆錛?錛夊悗绔澶囩敱鑻ュ共鍒嗘帶涓績璁$畻鏈虹粍鎴愩傚悇鍒嗘帶璁$畻鏈鴻繍琛屾湇鍔″櫒绔蔣浠訛紝鎺ユ敹鏉ヨ嚜鍓嶇鍘嬬緝瑙嗭紙闊籌級棰戙佹樉紺猴紙鎾斁錛夛紱閫氳繃緗戠粶瀵瑰墠绔簯鍙般佹憚鍍忔満榪涜鎺у埗錛涢噰鐢ㄧ粍鎾妧鏈紝瀹炵幇鍒嗗竷寮忚棰戞墽鐫鍏ュ拰鍒嗕赴寮忚棰戝叡浜細姣忎釜鍒嗘帶涓績涓繪満鍙互鍚屾椂鐩戞帶澶氫釜鍓嶇錛屽嵆鈥滀竴鐐瑰澶氱偣鈥濓紱涓嶅悓鍒嗘帶蹇冧篃鍙互鍚屾椂鐩戞帶鍚屼竴鍓嶇錛屽嵆鈥滃鐐瑰涓鐐光濄?

銆銆2 緗戠粶浼犺緭妯″潡鐨勮璁′笌瀹炵幇


銆銆2.1 緋葷粺浼犺緭鏁版嵁綾誨瀷鐨勭壒鐐瑰強閫氫俊鍗忚鐨勯夋嫨


銆銆緋葷粺浼犺緭鏁版嵁鏈夛細鎺у埗鏁版嵁銆侀煶棰戙佽棰戞暟鎹佸悗绔垎鎺т腑蹇冮氳繃緗戠粶鍚戠洃鎺х幇鍦轟富鏈哄鍥磋澶囦簯鍙板強鎽勫儚鏈哄彂閫佹帶鍒朵俊鍙鳳紝瀹炵幇浜戝彴鍔ㄤ綔錛堜笂銆佷笅銆佸乏銆佸彸銆佽嚜鍔級鎽勫儚鏈哄厜鍦堛佺劍璺濆強鑱氱劍涓夊彲鍙橈紝瑕佹眰鎺у埗淇″彿鐨勪紶杈撳噯紜棤璇紱闊抽銆佽棰戞槸榪炵畫錛屾暟鎹噺澶э紝鍏佽浼犺緭涓瓨鍦ㄤ竴瀹氱殑鏁版嵁閿欒鐜囧強鏁版嵁涓㈠け鐜囷紝浣嗗疄鏃舵ц姹傚緢楂樸傛澶栵紝鍦ㄧ洃鎺х郴緇熶腑錛岃瀹炵幇闊寵棰戠殑鍒嗗竷寮忔帴鍏ュ拰鏁版嵁鍏變韓錛屽繀欏昏繘琛岄煶瑙嗛鐨勫鐐逛紶杈撱傛牱瀹炵幇涓婅堪鐩爣錛熼鍏堟槸閫氫俊鍗忚鐨勯夋嫨錛孴CP/IP鍗忚鏄箍娉涗嬌鐢ㄧ殑緗戝崗璁紝鍏剁綉緇滄ā鍨嬪畾涔変簡鍥涘眰錛堝嵆緗戠粶鎺ュ彛灞傘佺綉緇滃眰銆佷紶杈撳眰銆佸簲鐢ㄥ眰錛夌綉緇滈氫俊鍗忚銆備紶杈撳眰鍖呭惈涓や釜鍗忚錛氫紶杈撴帶鍒跺崗璁紙TCP錛夊拰鐢ㄦ埛鏁版嵁鎶ュ崗璁紙UDP錛夈侷P鏄浗闄呬簰鑱斿崗璁紝浣嶄簬緗戠粶灞傘俆CP鍗忚鏄潰鍚戣繛鎺ョ殑錛屾彁渚涘彲闈犵殑嫻佹湇鍔★紱UDP鏄棤榪炴帴鐨勶紝鎻愪緵鏁版嵁鎶ユ湇鍔★紱TCP閲囩敤鎻愪緵紜涓庤秴鏃墮噸鍙戙佹粦鍔ㄧ獥鍙f満鍒剁瓑鎺柦鏉ヤ繚璇佷紶杈撶殑鍙潬鎬э紝姝f槸榪欎簺鎺柦澧炲姞浜嗙綉緇滅殑寮閿銆傚鏋滅敤TCP浼犺緭瑙嗭紙闊籌級棰戞暟鎹紝澶ч噺鐨勬暟鎹閲忓紩璧烽噸浼犮傦紝浣垮緱緗戠粶璐熻澆澶у茍浼氬姞澶у歡榪燂紱UDP鍗忚鏄渶綆鍗曠殑浼犺緭鍗忚錛屼笉鎻愪緵鍙潬鎬т繚璇侊紝姝e洜涓篣DP鍗忚涓嶈繘琛屾暟鎹‘璁や笌閲嶄紶鍥斤紝澶уぇ鎻愰珮浜嗕紶杈撴晥鐜囷紝鍏鋒湁楂樻晥蹇熺殑鐗圭偣錛汭pv4瀹氫箟浜嗕笁縐岻P鏁版嵁鍖呯殑浼犺緭錛氬崟鎾佸箍鎾強緇勬挱銆傝緋葷粺涓疄鐜拌錛堥煶錛夐鏁版嵁鐨勫鐐逛紶杈擄紝鑻ラ噰鐢ㄥ崟鎾紝鍒欏悓鏍風殑闊熾佽棰戞暟鎹鍙戦佸嬈★紝榪欐牱瀵艱嚧鍙戦佽呰礋鎷呴噸銆佸歡榪熼暱銆佺綉緇滄嫢濉烇紱鑻ョ敤騫挎挱錛岀綉緇滀腑鐨勬瘡涓珯鐐歸兘灝嗘帴鏀跺埌鏁版嵁錛屼笉綆¤緇撶偣鍚﹂渶瑕佹暟鎹紝澧炲姞浜嗛潪鎺ユ敹鑰呯殑寮閿錛涚粍鎾槸涓縐嶅厑璁鎬竴涓垨澶氫釜鍙戦佽咃紙緇勬挱婧愶級鍙戦佸崟涓鐨勬暟鎹寘鍒板涓帴鏀惰咃紙涓嬈$殑銆佸悓鏃剁殑錛夌殑緗戠粶鎶鏈傜粍鎾簮鎶婃暟鎹寘鍙戦佸埌鐗瑰畾緇勬挱緇勶紝鑰屽彧鏈夊睘浜庤緇勬挱緇勭殑鍦板潃鎵嶈兘鎺ユ敹鍒版暟鎹寘銆傜敱浜庢棤璁烘湁澶氬皯涓洰鐨勫湴鍧錛屽湪鏁翠釜緗戠粶鐨勪換浣曚竴鏉¢摼璺笂閮藉彧浼犻佸崟涓鐨勬暟鎹寘銆傚洜姝ょ粍鎾彁楂樹簡緗戠粶浼犺緭鐨勬晥鐜囷紝鏋佸ぇ鍦拌妭鐪佷簡緗戠粶浼犺緭銆傜粍鎾柟寮忓彧閫傜敤浜嶶DP銆傜患涓婃墍榪幫紝閲囩敤TCP/IP浼犺緭鎺у埗淇″彿錛屽嵆淇′護閫氶亾錛涢噰鐢║DP/IP浼犺緭闊寵棰戜俊鍙鳳紝鍗蟲暟鎹氶亾銆?
銆銆IP緇勬挱渚濊禆涓涓壒孌婄殑鍦板潃緇勨斺斺滅Щ鎾潃鈥濓紝鍗矰綾誨湴鍧銆傝寖鍥村湪224.0.0.0-239.255.255.255涔嬮棿錛堝叾涓?24.0.0.0-224.0.0.255鏄淇濈暀鐨勫湴鍧錛夛紝D綾誨湴鍧鏄姩鎬佸垎閰嶅拰鎭㈠鐨勭灛鎬佸湴鍧銆傜粍鎾湴鍧鍙兘浣滀負淇″鍦板潃浣跨敤錛岃屼笉鑳藉嚭鐜板湪浠諱綍淇℃簮鍦板潃涓傛瘡涓涓粍鎾粍瀵瑰簲浜庡姩鎬佸垎閰?鐨勪竴涓狣綾誨湴鍧銆傜粍鎾殑鐗圭偣錛氱粍鎾粍鐨勬垚鍛樻槸鍔ㄦ佺殑錛屼富鏈哄彲浠ヤ換浣曟椂闂村姞鍏ユ垨紱誨紑緇勬挱緇勶紝涓繪満緇勪腑鐨勬垚鍛樺湪浣嶇疆涓婂拰鏁伴噺 鏃ф病鏈夐檺鍒剁殑銆?


銆銆2.2 Windows涓嬶紝IP緇勬挱鐨刉insock2瀹炵幇


銆銆Windows鐜涓嬬粍鎾氫俊鏄熀浜嶹indowsSocket鐨勩俉indows Socket鎻愪緵涓ょ涓嶅悓IP緇勬挱鐨勫疄鐜版柟娉曪細Windows Socket鎻愪緵涓ょ涓嶅悓鐨処P緇勬挱鐨勫疄鐜版柟娉曪細Winsock1涓嶹insock2銆傚湪Windows2000騫沖彴瀹炵幇VC++6.0寮鍙戝伐鍏鳳紝鍦ㄦ湰緋葷粺涓疄鐜頒簡鍩轟簬Winsock2鐨勭粍鎾氫俊緙栫▼銆?
銆銆鍙戦佺錛堝墠绔佸鎴風錛夊疄鐜版楠わ細
銆銆(1)鍔犺澆Winsock2搴擄紝瀹屾垚Winsock2鐨勫垵濮嬪寲錛?
銆銆WSAStarup(MAKEWORD(2,2),&wsaData)錛?2)寤虹珛鏈湴濂楁帴瀛楋紙UDP錛夛細
m_socket=WSASocke(AF_INET,SOCK_DGRAM,IPPROTO_UDP,NULL,0,
WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);
銆銆//緇勬挱閫氫俊鍏鋒湁涓や釜灞傞潰鐨勯噸瑕佺壒寰侊細鎺у埗灞傞潰鍜屾暟鎹眰闈€傛帶鍒跺眰闈㈠喅瀹氫竴涓鎾粍寤虹珛閫氫俊鐨勬柟寮忥紝鏁版嵁灞傞潰鍐沖畾閫氫俊鎴愬憳闂存暟鎹紶杈撶殑鏂瑰紡銆傛瘡涓涓眰闈㈡湁涓ょ褰㈠紡錛屼竴縐嶆槸鈥滄湁闄愮殑鈥濓紝鍙︿竴縐嶆槸鈥滄棤鏍圭殑鈥濓紱鏁版嵁鎶P緇勬挱鍦ㄤ袱涓眰闈笂閮芥槸鈥滄棤鏍光濈殑銆備換涓鐢ㄦ埛鍙戦佺殑鏁版嵁閮藉皢琚紶閫佸埌緇勪腑鎵鏈夊叾瀹冩垚鍛樸傛渶鍚庝竴涓弬鏁拌〃鏄庢柊鍒涘緩鐨勫鎺ュ瓧鍦ㄦ帶鍒跺眰闈笌鏁版嵁灞傞潰閮芥槸鈥滄棤鏍圭殑鈥濄?
鍙互閫氳繃setsocket鍑芥暟璁劇疆濂楁帴瀛楃殑灞炴э紝濡傚湴鍧閲嶇敤錛岀紦鍐插尯鏄帴鏀惰繕鏄彂閫併?
銆銆M_localAddr.sin_family = AF_INET;
銆銆M_localAddr.sin_port=m_iPort;//鏈湴绔彛鍙?
銆銆M_localAddr..sin _addr.S_un.S_addr=m_uLocalIP;//鏈湴IP鍦板潃錛?


銆銆錛?錛夌粦瀹氾紙灝嗘柊鍒涘緩鐨勫瀛楄妭涓庢湰鍦版彃鍙e湴鍧榪涜緇戝畾錛夛細
銆銆bind(m_socket,(PSOCKADDR)&(m_localAddr),sizeof(m_localAddr);


銆銆(4)璁劇疆鐢熷瓨鏃墮棿錛堝嵆鏁版嵁鍖呮渶澶氬厑璁歌礬鐢卞灝戜釜緗戞錛夛細
銆銆WSAIoctl(m_socket,SIO_MULTICAST_SCOPE,//璁劇疆鏁版嵁鎶ョ敓瀛樻椂闂達紱
銆銆&iMcastTTL,//鐢熷瓨鏃墮棿澶у皬錛?
銆銆sizeof(iMcastTTL),NULL,0,&cbRet,NULL,NULL)錛?


銆銆錛?錛夐厤緗甃oopback,浠ュ喅瀹氱粍鎾暟鎹撫鏄惁鍥為侊細


銆銆int bLoopback=FALSE;
銆銆WSAIoct(m_socket,SIO_MULTIPOINT_LOOPBACK,//鍏佽鎴栫姝㈢粍鎾暟鎹撫鍥為侊紱
銆銆&bLoopback,sizeof(bLoopback)錛孨ULL,0,&cbRet,NULL,NULL);


銆銆(6)鏀跺彂鏁版嵁錛?


銆銆鍦ㄥ彂閫佹柟錛堝墠绔佸鎴風錛夊搷搴斿彂閫佺殑娑堟伅鍑芥暟涓皟鐢ㄤ笅闈㈠嚱鏁幫細
銆銆WSASendTo (m_socket,&stWSABuf,&cbRet,0,(struct sockaddr*)&stDestAddr,//鍙戦佺殑鐩殑鍦板潃錛?
銆銆sizeof(struct(sockaddr),NULL,NULL);
銆銆鍦ㄥ彂閫佹柟錛堝墠绔佸鎴風錛夊搷搴旀帴鏀舵秷鎭嚱鏁頒腑璋冪敤涓嬮潰鍑芥暟錛?
銆銆WSARecvFrom(m_socket,&stWSABuf,1,& cbRet,&Flag,(struct sockaddr*)&stSrcAddr,//婧愬湴鍧錛?
銆銆&iLen錛孨ULL錛孨ULL錛夛紱


銆銆錛?錛夊皢緇勬挱濂楁帴瀛楄緗負寮傛I/O宸ヤ綔妯″紡錛屽湪璇ュ鑺傚瓧涓婃帴鏀朵簨浠朵負鍩虹鐨勭綉緇滀簨浠墮氱煡錛?


銆銆WSAEventSelect(m_socket錛宮_hNetworkEvent錛?/緗戠粶浜嬩歡鍙ユ焺錛涘皢姝ゅ瀛楄妭涓庤浜嬩歡鍙ユ焺騫惰仈鍦ㄤ竴璧鳳紱
銆銆FD_WRITE|FD_READ錛夛紱//鍙戠敓姝や袱涓簨浠朵箣涓錛屽垯灝唌_hNetworkEvent緗負鏈変俊鍙風姸鎬侊紱


銆銆錛?錛夊湪宸ヤ綔綰跨▼涓緗細


銆銆WSAWaitForMultipleEvent錛?錛?/絳夊緟浜嬩歡鐨勪釜鏁幫級錛?
銆銆p->m_eventArray,//瀛樻斁浜嬩歡鍙ユ焺鐨勬暟緇勶紱
銆銆FALSE錛學SA_INFINITE錛孎ALSE錛夛紱


銆銆錛?錛夊叧闂粍鎾瀛楄妭錛?


銆銆closesocket(m_socket)錛?


銆銆鎺ユ敹绔紙鍚庣銆佹湇鍔″櫒绔級瀹炵幇姝ラ錛?


銆銆錛?錛?錛?錛変笌鍙戦佺錛堝鎴風錛夌浉鍚岋紱
銆銆錛?錛夎皟鐢╓SAJLoinLeaf鍔犲叆緇勬挱緇勶細


銆銆SOCKET NetSock=WSAJoinLeaf(sock,//蹇呴』涓虹粍鎾爣蹇楄繘琛屽垱寤猴紝鍚﹀垯璋冪敤澶辮觸錛?
銆銆錛圥SOCKADDR錛?amp;錛坢_stDestAddr,//緇勬挱瀵煎潃錛屼笌鍙戦佹柟鐨勭洰鐨勫湴鍧鐩稿悓錛?
銆銆sizeof(m_stDestAddr),UNLL,NULL,NULL,NULL,
銆銆JL_BOTH));//鍏佽鎺ユ敹鍜屽彂閫侊紱


銆銆錛?錛変笌瀹㈡埛绔紙6錛夌浉鍚岋紱錛?錛変笌瀹㈡埛绔紙7錛夌浉鍚岋紱錛?錛変笌瀹㈡埛绔紙8錛夌浉鍚岋紱錛?錛夌寮緇勬挱緇勶紱closesocket(NewSock)錛?/NewSock鏄皟鐢╓SAoinLeaf錛堬級榪斿洖鐨勫鑺傚瓧銆?


銆銆2.3 鍦ㄧ洃鎺х郴緇熶腑緗戠粶浼犺緭妯″潡鐨勮璁?


銆銆緗戠粶浼犺緭妯″潡嫻佺▼濡傚浘2鎵紺恒?/p>


銆銆鍙戦佺錛堝墠绔洃鎺х幇鍦轟富鏈恒佸鎴風錛夌洃鎺т富鏈鴻繍琛屽鎴風紼嬪簭銆傚湪涓葷嚎紼嬩腑錛屽惎鍔ㄨ鍚屻侀煶棰戜袱涓嚎紼嬪垎鍒瑙嗛鍙婇煶棰戣繘琛岄噰闆嗭紝鏀懼叆瑙嗭紙闊籌級棰戠紦鍐插尯錛涜棰戝湪鏈湴鍥炴斁錛涘悓鏃訛紝鐩戝惉鍒嗘帶涓績鐨勮繛鎺ヨ姹傦紝鏀跺埌榪炴帴璇鋒眰錛孴CP涓夋鎻℃墜錛屽緩绔婽CP榪炴帴錛堜俊浠ら氶亾錛夛紱閫氳繃淇′護閫氶亾錛屽悜鍒嗘帶蹇冨彂閫佷簩緇勭粍鎾湴鍧鍙婄鍙e彿錛堝搴旇棰戝強闊抽錛岄煶棰戜袱涓嚎紼嬶紱鍒嗗埆鍦ㄨ錛堥煶錛夐綰跨▼涓畬鎴愶紱鍒╃敤Winsock2寤虹珛瑙嗭紙闊籌級棰戞暟鎹氶亾錛圲DP錛夛紙婧愮爜鍓嶅凡榪板強錛夛紱瀵硅錛堥煶錛夐榪涜鍘嬬緝緙栫爜銆佺粍鎾彂閫侊紱闊抽綰跨▼鎺ユ敹鍒嗘帶涓績鐨勯煶棰戞暟鎹寘錛岃В鐮佸茍鎾斁錛涘疄鐜拌棰戠殑鍗曞悜浼犺緭鍜岄煶棰戠殑鍙屽悜浼犺緭銆?
銆銆鎺ユ敹绔紙鍚庣鍒嗘帶涓績銆佹湇鍔″櫒绔級鍒嗘帶涓績涓繪満榪愯鏈嶅姟鍣ㄧ紼嬪簭錛屽湪涓葷嚎紼嬩腑鍚戝墠绔洃鎺х幇鍦轟富鏈哄彂鍑鴻繛鎺ヨ姹傦紙CALL錛夛紝涓夋鎻℃墜寤虹珛TCP榪炴帴錛堜俊浠ら氶亾錛夛紱鍚庣鎺ユ敹鍒扮粍鎾湴鍧鍙婄鍙e彿鍚庯紝鍚姩瑙嗭紙闊籌級棰戜袱涓嚎紼嬶紝瀹屾垚錛涘埄鐢╓insock2寤虹珛瑙嗭紙闊籌級棰戞暟鎹氶亾錛圲DP錛夛紝鍔犲叆瑙嗭紙闊籌級棰戠粍鎾粍錛屾帴鏀跺帇緙╄錛堥煶錛夐鍖咃紝騫惰В鐮佹樉紺猴紙鎾斁錛夛紱鍏朵腑闊抽綰跨▼錛岃繕瑕佸畬鎴愰煶棰戞暟鎹寘瑙g爜鏄劇ず錛堟挱鏀撅級錛涘叾涓煶棰戠嚎紼嬶紝榪樿瀹屾垚闊抽鏁版嵁鍖呯殑鍘嬬緝銆佸彂閫侊紱瀹炵幇瑙嗛鐨勫崟鍚戜紶杈撱侀煶棰戠殑鍙屽悜浼犺緭銆?
銆銆涓涓悗绔垎鎺т腑蹇冨彲鍚屾椂鐩戞帶12璺墠绔棰戝強闊抽淇″彿錛屽湪璁捐鏈嶅姟鍣ㄧ鐩戞帶紼嬪簭鏃訛紝閲囩敤澶氱嚎紼嬫妧鏈紝姣忓緩绔嬩竴瀵瑰墠绔洃鎺т富鏈轟笌鍚庣鍒嗘帶涓績錛堟湇鍔″櫒錛夌殑TCP榪炴帴錛屽氨寮涓や釜鎺ユ敹綰跨▼錛堜竴涓帴鏀惰棰戠嚎紼嬶紱涓涓帴鏀墮煶棰戠嚎紼嬶級錛岃棰戠嚎紼嬫帴鏀惰棰戞暟鎹寘榪涜瑙e帇緙╁強鍥炴斁錛涢煶棰戠嚎紼嬫帴鏀墮煶棰戞暟鎹寘榪涜瑙e帇緙╁強鎾斁銆傚浜戝彴鍙婃憚鍍忔満鐨勬帶鍒舵寚浠ら氳繃淇′護閫氶亾浼犺緭銆?
銆銆鏈郴緇熻繍琛屽湪Win2000騫沖彴涓婏紝鐢╒C++6.0寮鍙戝伐鍏峰紑鍙戙?
銆銆鍦ㄨ繙紼嬫暟瀛楅煶瑙嗛鐩戞帶緋葷粺鐨勪紶杈撴ā鍧楄璁′腑錛屾牴鎹煶棰戦鏁版嵁浼犺緭鍙婃帶鍒朵俊鍙蜂紶杈撶殑鐗圭偣錛岃繍鐢↖P緇勬挱鎶鏈瀬澶у湴鍑忚交浜嗙綉緇滆礋鎷咃紝閬垮厤浜嗚祫婧愮殑嫻垂錛岃妭鐪佷簡緗戠粶甯﹀錛涘埄鐢═CP/IP鍗忚璁捐浜嗕俊浠ら氶亾錛圱CP錛夊拰鏁版嵁閫氶亾錛圲DP錛夛紱榪愮敤Windows澶氱嚎紼嬫満鍒跺疄鐜頒簡闊抽鏁版嵁鐨勫疄鏃躲佸鐐逛紶杈撳拰鎺у埗淇″彿鐨勫彲闈犱紶錛屾彁楂樹簡紼嬪簭榪愯鐨勬晥鐜囥傚湪璇ョ郴緇熺殑鍩虹涓婅繘琛屾敼閫犲拰鎵╁睍錛屽彲浠ュ簲鐢ㄥ埌榪滅▼鏁欏銆佽繙紼嬪尰鐤楃瓑澶氱澶氬獟浣撻氫俊錛涘洜姝わ紝榪滅▼鏁板瓧闊寵棰戠洃鎺х郴緇熺殑璁捐鍜屽疄鐜頒笉浠呭叿鏈夌洃鎺ф柟闈㈢殑鐜板疄鎰忎箟錛岃屼笖瀵逛簬璁稿搴旂敤閮芥湁鍊熼壌鍜屽弬鑰冧環鍊箋?


濂囧 2006-04-26 17:33 鍙戣〃璇勮
]]>
WSAEventSelect錛堝紑鍙戠綉緇滈氫俊紼嬪簭鍏ラ棬鐨勭戶緇?-杞嚜CSDN錛?/title><link>http://m.shnenglu.com/jjbird/articles/6333.html</link><dc:creator>濂囧</dc:creator><author>濂囧</author><pubDate>Wed, 26 Apr 2006 09:30:00 GMT</pubDate><guid>http://m.shnenglu.com/jjbird/articles/6333.html</guid><wfw:comment>http://m.shnenglu.com/jjbird/comments/6333.html</wfw:comment><comments>http://m.shnenglu.com/jjbird/articles/6333.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://m.shnenglu.com/jjbird/comments/commentRss/6333.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/jjbird/services/trackbacks/6333.html</trackback:ping><description><![CDATA[ <table cellspacing="0" cellpadding="0" width="95%" border="0"> <tbody> <tr> <td align="middle" width="100%"> <h2> <b>WSAEventSelect錛堝紑鍙戠綉緇滈氫俊紼嬪簭鍏ラ棬鐨勭戶緇?-杞嚜CSDN錛?/b> </h2> </td> </tr> <tr> <td width="100%"> <p> </p> <p>聽聽 鍓嶉潰璁ㄨ鐨勫紑鍙戠綉緇滈氫俊鐨勭粡鍏稿叆闂ㄩ噰鐢ㄧ殑鏄疻SAAsyncSelect鐨勫紓姝/O妯″瀷錛屾湰鏂囧皢璁ㄨWSAEventSelect寮傛I/O妯″瀷銆? </p> <p>聽聽聽聽聽聽 WSAEventSelect妯″瀷鏈夌偣綾諱技WSAAsyncSelect妯″瀷錛屼笉鍚岀殑鏄粬涓嶆槸鐢ㄦ秷鎭槧灝勭殑鏂瑰紡鏉ュ搷搴旂綉緇滀簨浠訛紝鑰屾槸鐢ㄧ瓑寰呭閲嶄簨浠剁殑鏂瑰紡鏉ュ搷搴旂綉緇滀簨浠躲備笅闈㈡槸鐢╓SAEventSelect妯″瀷鍜屽綰跨▼鏈哄埗鍋氱殑涓涓畝鍗曠殑鏈嶅姟鍣ㄧ▼搴忕殑.cpp鍜?h鏂囦歡錛屽簲鐢ㄧ▼搴忓熀浜嶮FC鐨勬爣鍑嗗璇濇銆傚疄鐜版帴鍙楀涓鎴風鐨勮繛鎺ヨ姹傦紝騫惰褰曚笅鎵鏈夊鎴風鐨勭浉鍏充俊鎭紝鏄劇ず鍦ㄥ垪琛ㄦ涓?/p> <p>// serverDlg.cpp : implementation file<br />//</p> <p>#include "stdafx.h"<br />#include "server.h"<br />#include "serverDlg.h"</p> <p>#ifdef _DEBUG<br />#define new DEBUG_NEW<br />#undef THIS_FILE<br />static char THIS_FILE[] = __FILE__;<br />#endif</p> <p>SOCKET Accept; <a href="file://鐢?"><font color="#336699">file://鐢?/font></a>浜庢柊鐨勪竴涓繛鎺ラ氫俊鐨勫鎺ュ瓧<br />WSAEVENT NewEvent; <a href="file://瀵?"><font color="#336699">file://瀵?/font></a>搴斾簬鏂扮殑濂楁帴瀛楃殑鏂頒簨浠?br />SOCKET Socket[WSA_MAXIMUM_WAIT_EVENTS];聽 <a href="file://瀛?"><font color="#336699">file://瀛?/font></a>鏀炬墍鏈夌敓鎴愮殑濂楁帴瀛?br />WSAEVENT Event[WSA_MAXIMUM_WAIT_EVENTS]; <a href="file://瀛?"><font color="#336699">file://瀛?/font></a>鏀炬墍鏈夌敓鎴愮殑浜嬩歡瀵硅薄<br />int EventTotal; <a href="file://鍒?"><font color="#336699">file://鍒?/font></a>寤虹殑浜嬩歡鎬繪暟<br />int Index;聽聽聽聽聽 <a href="file://絳?"><font color="#336699">file://絳?/font></a>寰呭閲嶄簨浠跺嚱鏁扮殑榪斿洖鍊?br />WSANETWORKEVENTS NetworkEvents; <a href="file://鐢?"><font color="#336699">file://鐢?/font></a>浜庢帴鏀跺鎺ュ瓧涓婂彂鐢熺殑緗戠粶浜嬩歡綾誨瀷浠ュ強鍙兘鍑虹幇鐨勯敊<br />璇唬鐮?/p> <p>/////////////////////////////////////////////////////////////////////////////<br />// CAboutDlg dialog used for App About</p> <p>class CAboutDlg : public CDialog<br />{<br />public:<br />聽CAboutDlg();</p> <p>// Dialog Data<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_DATA(CAboutDlg)<br />聽enum { IDD = IDD_ABOUTBOX };<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_DATA</p> <p>聽// ClassWizard generated virtual function overrides<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_VIRTUAL(CAboutDlg)<br />聽protected:<br />聽virtual void DoDataExchange(CDataExchange* pDX);聽聽聽 // DDX/DDV support<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_VIRTUAL</p> <p>// Implementation<br />protected:<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_MSG(CAboutDlg)<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_MSG<br />聽DECLARE_MESSAGE_MAP()<br />};</p> <p>CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)<br />{<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_DATA_INIT(CAboutDlg)<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_DATA_INIT<br />}</p> <p>void CAboutDlg::DoDataExchange(CDataExchange* pDX)<br />{<br />聽CDialog::DoDataExchange(pDX);<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_DATA_MAP(CAboutDlg)<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_DATA_MAP<br />}</p> <p>BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_MSG_MAP(CAboutDlg)<br />聽聽// No message handlers<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_MSG_MAP<br />END_MESSAGE_MAP()</p> <p>/////////////////////////////////////////////////////////////////////////////<br />// CServerDlg dialog</p> <p>CServerDlg::CServerDlg(CWnd* pParent /*=NULL*/)<br />聽: CDialog(CServerDlg::IDD, pParent)<br />{<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_DATA_INIT(CServerDlg)<br />聽聽// NOTE: the ClassWizard will add member initialization here<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_DATA_INIT<br />聽// Note that LoadIcon does not require a subsequent DestroyIcon in Win32<br />聽m_Connectnum = 0;<br />聽m_NetworkID = 0;<br />聽EventTotal = 0;<br />聽聽聽 for(int i = 0; i < MAX_CLIENT_NUM; i++)<br />聽{<br />聽聽ZeroMemory(&m_ClientInfo[i], sizeof(client_info));<br />聽}</p> <p>聽m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);<br />}</p> <p>void CServerDlg::DoDataExchange(CDataExchange* pDX)<br />{<br />聽CDialog::DoDataExchange(pDX);<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_DATA_MAP(CServerDlg)<br />聽聽// NOTE: the ClassWizard will add DDX and DDV calls here<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_DATA_MAP<br />}</p> <p>BEGIN_MESSAGE_MAP(CServerDlg, CDialog)<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_MSG_MAP(CServerDlg)<br />聽ON_WM_SYSCOMMAND()<br />聽ON_WM_PAINT()<br />聽ON_WM_QUERYDRAGICON()<br />聽ON_WM_TIMER()<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_MSG_MAP<br />END_MESSAGE_MAP()</p> <p>/////////////////////////////////////////////////////////////////////////////<br />// CServerDlg message handlers</p> <p>BOOL CServerDlg::OnInitDialog()<br />{<br />聽CDialog::OnInitDialog();</p> <p>聽// Add "About..." menu item to system menu.</p> <p>聽// IDM_ABOUTBOX must be in the system command range.<br />聽ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);<br />聽ASSERT(IDM_ABOUTBOX < 0xF000);</p> <p>聽CMenu* pSysMenu = GetSystemMenu(FALSE);<br />聽if (pSysMenu != NULL)<br />聽{<br />聽聽CString strAboutMenu;<br />聽聽strAboutMenu.LoadString(IDS_ABOUTBOX);<br />聽聽if (!strAboutMenu.IsEmpty())<br />聽聽{<br />聽聽聽pSysMenu->AppendMenu(MF_SEPARATOR);<br />聽聽聽pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);<br />聽聽}<br />聽}</p> <p>聽// Set the icon for this dialog.聽 The framework does this automatically<br />聽//聽 when the application's main window is not a dialog<br />聽SetIcon(m_hIcon, TRUE);聽聽聽// Set big icon<br />聽SetIcon(m_hIcon, FALSE);聽聽// Set small icon<br />聽<br />聽// TODO: Add extra initialization here</p> <p>聽WSADATA wsaData;<br />聽int ret;</p> <p>聽ret = WSAStartup(MAKEWORD(2,2), &wsaData);<br />聽if(ret != 0)<br />聽{<br />聽聽MessageBox("鍒濆鍖栧鎺ュ瓧澶辮觸!");<br />聽聽return FALSE;<br />聽}</p> <p>聽<a href="file://鍒?"><font color="#336699">file://鍒?/font></a>寤轟竴涓鎺ュ瓧<br />聽m_ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);<br />聽聽聽聽聽聽聽 if(m_ListenSocket == INVALID_SOCKET)<br />聽{<br />聽聽MessageBox("鍒涘緩濂楁帴瀛楀け璐?");<br />聽聽closesocket(m_ListenSocket);<br />聽聽WSACleanup();<br />聽聽return FALSE;<br />聽}</p> <p>聽<a href="file://緇?"><font color="#336699">file://緇?/font></a>瀹氬埌鎸囧畾鐨勭鍙d笂<br />聽sockaddr_in localaddr;<br />聽localaddr.sin_family = AF_INET;<br />聽localaddr.sin_port = htons(1688);<br />聽localaddr.sin_addr.s_addr = 0;</p> <p>聽if(bind(m_ListenSocket, (const struct sockaddr*)&localaddr, sizeof(sockaddr))<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 == SOCKET_ERROR)<br />聽{<br />聽聽MessageBox("緇戝畾鍦板潃澶辮觸!");<br />聽聽closesocket(m_ListenSocket);<br />聽聽WSACleanup();<br />聽聽return FALSE;<br />聽}<br />聽<br />聽NewEvent = WSACreateEvent(); <a href="file://鍒?"><font color="#336699">file://鍒?/font></a>寤轟竴涓柊鐨勪簨浠跺璞?/p> <p>聽<a href="file://灝?"><font color="#336699">file://灝?/font></a>鍒涘緩鐨勪簨浠跺璞′笌鍓嶉潰鍒涘緩鐨勫鎺ュ瓧鍏寵仈鍦ㄤ竴璧?騫舵敞鍐岀綉緇滀簨浠剁被鍨?br />聽聽聽聽聽聽聽 if(WSAEventSelect(m_ListenSocket, NewEvent, FD_ACCEPT | FD_CLOSE) == SOCKET_ERROR)<br />聽{<br />聽聽MessageBox("娉ㄥ唽緗戠粶浜嬩歡澶辮觸!");<br />聽聽closesocket(m_ListenSocket);<br />聽聽WSACleanup();<br />聽聽return FALSE;<br />聽}</p> <p>聽<a href="file://璁?"><font color="#336699">file://璁?/font></a>鍒涘緩鐨勫鎺ュ瓧澶勪簬鐩戝惉鐘舵?br />聽listen(m_ListenSocket, 5);</p> <p>聽Event[EventTotal] = NewEvent;<br />聽Socket[EventTotal] = m_ListenSocket;<br />聽EventTotal++;</p> <p>聽聽聽聽聽聽聽 <a href="file://璁?"><font color="#336699">file://璁?/font></a>緗甃ist鎺т歡鐨勫浘璞″垪琛?br />聽HICON hIcon;</p> <p>聽m_imagelist.Create(16, 16, 0, 4, 4); // 32, 32 for large icons<br />聽hIcon = AfxGetApp()->LoadIcon(IDI_CLIENT_INFO);<br />聽<br />聽m_imagelist.SetBkColor (RGB(248,232,224));<br />聽m_imagelist.Add(hIcon);</p> <p>聽pList = (CListCtrl*)GetDlgItem(IDC_CLIENT_INFO);<br />聽pList->SetImageList(&m_imagelist, LVSIL_SMALL);<br />聽pList->SetBkColor(RGB(248,232,224));<br />聽pList->SetTextBkColor(RGB(248,232,224));</p> <p>聽pList->InsertColumn(0,"聽聽 瀹㈡埛鍚?,LVCFMT_CENTER,90, 0);<br />聽pList->InsertColumn(1,"緗戠粶ID",LVCFMT_CENTER,50,1);<br />聽pList->InsertColumn(2,"IP鍦板潃",LVCFMT_CENTER,100,2);<br />聽pList->InsertColumn (3,"鐧誨綍鏃墮棿",LVCFMT_CENTER,120,3);<br />聽pList->InsertColumn (4,"鍦ㄧ嚎鏃墮棿",LVCFMT_CENTER,100,4);</p> <p>聽SetTimer(1, 1000, NULL);</p> <p>聽<a href="file://鍚?"><font color="#336699">file://鍚?/font></a>鍔ㄦ牳蹇冨鐞嗙嚎紼?br />聽AfxBeginThread(KernelWorkThread,this,THREAD_PRIORITY_NORMAL);</p> <p>聽return TRUE;聽 // return TRUE聽 unless you set the focus to a control<br />}</p> <p>void CServerDlg::OnSysCommand(UINT nID, LPARAM lParam)<br />{<br />聽if ((nID & 0xFFF0) == IDM_ABOUTBOX)<br />聽{<br />聽聽CAboutDlg dlgAbout;<br />聽聽dlgAbout.DoModal();<br />聽}<br />聽else<br />聽{<br />聽聽CDialog::OnSysCommand(nID, lParam);<br />聽}<br />}</p> <p>// If you add a minimize button to your dialog, you will need the code below<br />//聽 to draw the icon.聽 For MFC applications using the document/view model,<br />//聽 this is automatically done for you by the framework.</p> <p>void CServerDlg::OnPaint() <br />{<br />聽if (IsIconic())<br />聽{<br />聽聽CPaintDC dc(this); // device context for painting</p> <p>聽聽SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);</p> <p>聽聽// Center icon in client rectangle<br />聽聽int cxIcon = GetSystemMetrics(SM_CXICON);<br />聽聽int cyIcon = GetSystemMetrics(SM_CYICON);<br />聽聽CRect rect;<br />聽聽GetClientRect(&rect);<br />聽聽int x = (rect.Width() - cxIcon + 1) / 2;<br />聽聽int y = (rect.Height() - cyIcon + 1) / 2;</p> <p>聽聽// Draw the icon<br />聽聽dc.DrawIcon(x, y, m_hIcon);<br />聽}<br />聽else<br />聽{<br />聽聽CDialog::OnPaint();<br />聽}<br />}</p> <p>// The system calls this to obtain the cursor to display while the user drags<br />//聽 the minimized window.<br />HCURSOR CServerDlg::OnQueryDragIcon()<br />{<br />聽return (HCURSOR) m_hIcon;<br />}</p> <p> <a href="file://鏍?"> <font color="#336699">file://鏍?/font> </a>蹇冨鐞嗙嚎紼? 鍝嶅簲騫跺鐞嗗悇縐嶇綉緇滀簨浠?br />UINT KernelWorkThread(LPVOID pParam)<br />{<br />聽int len = sizeof(sockaddr);</p> <p>聽CServerDlg* dlg;<br />聽dlg = (CServerDlg*)pParam;</p> <p>聽while(1)<br />聽{<br />聽聽聽聽聽聽聽聽 Index = WSAWaitForMultipleEvents(EventTotal, Event, FALSE, WSA_INFINITE, FALSE);</p> <p>聽聽WSAEnumNetworkEvents(Socket[Index - WSA_WAIT_EVENT_0], <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Event[Index - WSA_WAIT_EVENT_0],<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 &NetworkEvents);<br />聽<br />聽聽if(NetworkEvents.lNetworkEvents & FD_ACCEPT)<br />聽聽<a href="file://榪?"><font color="#336699">file://榪?/font></a>鎺ヤ簨浠?br />聽聽{<br />聽聽聽if(NetworkEvents.iErrorCode[FD_ACCEPT_BIT] != 0)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("鎺ュ彈榪炴帴浜嬩歡澶辮觸!");<br />聽聽聽聽break;<br />聽聽聽}</p> <p>聽聽聽Accept = accept(Socket[Index - WSA_WAIT_EVENT_0], <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 (struct sockaddr*)&(dlg->clientaddr), &len);<br />聽聽聽if(Accept == INVALID_SOCKET)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("鎺ュ彈榪炴帴澶辮觸!");<br />聽聽聽聽break;<br />聽聽聽}<br />聽聽聽<br />聽聽聽if(EventTotal > WSA_MAXIMUM_WAIT_EVENTS)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("榪炴帴涓暟婧㈠嚭,鎷掔粷鎺ュ彈!");<br />聽聽聽聽break;<br />聽聽聽}</p> <p>聽聽聽NewEvent = WSACreateEvent();</p> <p>聽聽聽if(WSAEventSelect(Accept, NewEvent, FD_READ | FD_WRITE | FD_CLOSE)<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 == SOCKET_ERROR)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("娉ㄥ唽緗戠粶浜嬩歡澶辮觸!");<br />聽聽聽聽closesocket(Accept);<br />聽聽聽聽break;<br />聽聽聽}</p> <p>聽聽聽Event[EventTotal] = NewEvent;<br />聽聽聽Socket[EventTotal] = Accept;<br />聽聽聽EventTotal ++;<br />聽聽}</p> <p>聽聽if(NetworkEvents.lNetworkEvents & FD_READ)<br />聽聽<a href="file://璇?"><font color="#336699">file://璇?/font></a>鍙栨暟鎹簨浠?br />聽聽{<br />聽聽聽if(NetworkEvents.iErrorCode[FD_READ_BIT] != 0)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("璇諱簨浠跺け璐?");<br />聽聽聽聽break;<br />聽聽聽}</p> <p>聽聽聽if(dlg->OnReceive(Socket[Index - WSA_WAIT_EVENT_0]) == FALSE)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("璇誨彇鏁版嵁澶辮觸!");<br />聽聽聽聽break;<br />聽聽聽}<br />聽聽}</p> <p>聽聽if(NetworkEvents.lNetworkEvents & FD_CLOSE)<br />聽聽<a href="file://鍏?"><font color="#336699">file://鍏?/font></a>闂鎺ュ瓧浜嬩歡<br />聽聽{<br />聽聽聽if(NetworkEvents.iErrorCode[FD_CLOSE_BIT] != 0)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("鍏抽棴浜嬩歡澶辮觸!");<br />聽聽聽聽break;<br />聽聽聽}</p> <p>聽聽聽if(dlg->OnClose(Socket[Index - WSA_WAIT_EVENT_0]) == FALSE)<br />聽聽聽{<br />聽聽聽聽dlg->MessageBox("鍏抽棴濂楁帴瀛楀け璐?");<br />聽聽聽聽break;<br />聽聽聽}<br />聽聽}<br />聽}</p> <p>聽return 0;<br />}</p> <p>BOOL CServerDlg::OnClose(SOCKET pSocket)<br />{<br />聽int i, exitnum;<br />聽<br />聽for(i = 0; i < m_Connectnum; i++)<br />聽{<br />聽聽if(m_ClientInfo[i].Client_Socket == pSocket)<br />聽聽{<br />聽聽聽exitnum = i;<br />聽聽}<br />聽}<br />聽for(i = exitnum; i < m_Connectnum; i++)<br />聽{<br />聽聽memcpy(&m_ClientInfo[i], &m_ClientInfo[i+1], sizeof(client_info));<br />聽}</p> <p>聽m_Connectnum --;</p> <p>聽<a href="file://鍚?"><font color="#336699">file://鍚?/font></a>鎵鏈夊鎴風鍙戦佸湪綰垮鎴蜂俊鎭殑鎶ユ枃<br />聽cmd_client_info ClientInfo;<br />聽ClientInfo.cmd_type = CMD_CLIENT_INFO;<br />聽ClientInfo.client_num = m_Connectnum;<br />聽<br />聽for(i=0; i<=m_Connectnum; i++)<br />聽{<br />聽聽ClientInfo.Networks_ID[i] = m_ClientInfo[i].Network_ID;<br />聽聽strcpy(ClientInfo.users_name[i], m_ClientInfo[i].User_Name);<br />聽聽strcpy(ClientInfo.clients_ipaddr[i], inet_ntoa(m_ClientInfo[i].Client_Addr.sin_addr));<br />聽}<br />聽for(i=0; i<=m_Connectnum; i++)<br />聽{<br />聽聽send(m_ClientInfo[i].Client_Socket, (char*)&ClientInfo, sizeof(cmd_client_info), NULL);<br />聽}<br />聽closesocket(pSocket);</p> <p>聽聽聽聽聽聽聽 pList->DeleteItem(exitnum);<br />聽<br />聽return TRUE;<br />}</p> <p>BOOL CServerDlg::OnReceive(SOCKET pSocket)<br />{<br />聽聽聽 static char rcvbuf[65535];聽聽 <a href="file://鎺?"><font color="#336699">file://鎺?/font></a>鏀剁紦鍐插尯<br />聽聽聽 int ret;<br />聽int offset=0;<br />聽find_type* pFindType;<br />聽int i = 0;<br />聽CTime m_current_time=CTime::GetCurrentTime ();<br />聽CString strTime = m_current_time.Format("%c");<br />聽CString networkid; <a href="file://鍒?"><font color="#336699">file://鍒?/font></a>琛ㄦ鐨勭綉緇淚D欏?/p> <p>聽聽聽 ret = recv(pSocket, rcvbuf, 65535, 0);<br />聽if(ret == OPERATION_ERROR)<br />聽聽return FALSE;</p> <p>聽while(offset < ret)<br />聽{<br />聽聽pFindType = (find_type*)(rcvbuf+offset);<br />聽聽switch(pFindType->cmd_type)<br />聽聽{<br />聽聽case CMD_HELLO:聽 <br />聽聽聽cmd_hello Hello;<br />聽聽聽memcpy(&Hello, rcvbuf+offset, sizeof(cmd_hello));<br />聽聽聽offset+=sizeof(cmd_hello);</p> <p>聽聽聽cmd_hello_resp HelloResp;<br />聽聽聽m_NetworkID ++;<br />聽聽聽HelloResp.cmd_type = CMD_HELLO_RESP;<br />聽聽聽HelloResp.Network_ID = m_NetworkID;<br />聽聽聽strcpy(HelloResp.user_name, Hello.user_name);</p> <p>聽聽聽memcpy((struct sockaddr*)&(m_ClientInfo[m_Connectnum].Client_Addr),<br />聽聽聽聽(const struct sockaddr*)&clientaddr, sizeof(sockaddr));<br />聽聽聽m_ClientInfo[m_Connectnum].Client_Socket = Accept;<br />聽聽聽strcpy(m_ClientInfo[m_Connectnum].User_Name, HelloResp.user_name);<br />聽聽聽m_ClientInfo[m_Connectnum].Network_ID = m_NetworkID;<br />聽聽聽m_ClientInfo[m_Connectnum].Login_Time = m_current_time;<br />聽聽聽send(pSocket, (char*)&HelloResp, sizeof(cmd_hello_resp), NULL);</p> <p>聽聽聽<a href="file://鍚?"><font color="#336699">file://鍚?/font></a>鐧誨綍鐨勫鎴風鍙戦佸洖搴旀姤鏂?br />聽聽聽Sleep(200);</p> <p>聽聽聽cmd_client_info ClientInfo;<br />聽聽聽ClientInfo.cmd_type = CMD_CLIENT_INFO;<br />聽聽聽ClientInfo.client_num = m_Connectnum +1;</p> <p>聽聽聽for(i=0; i<=m_Connectnum; i++)<br />聽聽聽{<br />聽聽聽聽ClientInfo.Networks_ID[i] = m_ClientInfo[i].Network_ID;<br />聽聽聽聽strcpy(ClientInfo.users_name[i], m_ClientInfo[i].User_Name);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 strcpy(ClientInfo.clients_ipaddr[i], <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 inet_ntoa(m_ClientInfo[i].Client_Addr.sin_addr));<br />聽聽聽}</p> <p>聽聽聽<a href="file://鍚?"><font color="#336699">file://鍚?/font></a>鎵鏈夊湪綰垮鎴風鍙戦佸湪綰垮鎴蜂俊鎭姤鏂?br />聽聽聽for(i=0; i<=m_Connectnum; i++)<br />聽聽聽{<br />聽聽聽聽send(m_ClientInfo[i].Client_Socket, (char*)&ClientInfo,<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 sizeof(cmd_client_info), NULL);<br />聽聽聽}</p> <p>聽聽聽<a href="file://鍒?"><font color="#336699">file://鍒?/font></a>鏂板鎴風淇℃伅鍒楄〃<br />聽聽聽networkid.Format("%d", m_NetworkID);</p> <p>聽聽聽LVITEM lvinsert;<br />聽聽聽lvinsert.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;<br />聽聽聽lvinsert.iItem=m_Connectnum;<br />聽聽聽lvinsert.iSubItem=0;<br />聽聽聽lvinsert.cchTextMax=20;<br />聽聽聽lvinsert.pszText=HelloResp.user_name;<br />聽聽聽lvinsert.iImage = 0;<br />聽聽聽pList->InsertItem (&lvinsert);<br />聽聽聽pList->SetItemText (m_Connectnum,1,networkid);<br />聽聽聽pList->SetItemText(m_Connectnum,2,<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 inet_ntoa(m_ClientInfo[m_Connectnum].Client_Addr.sin_addr));<br />聽聽聽pList->SetItemText (m_Connectnum,3,strTime);</p> <p>聽聽聽m_Connectnum ++;</p> <p>聽聽聽break;<br />聽聽case CMD_ASK:<br />聽聽聽cmd_ask Ask;<br />聽聽聽cmd_ask_resp AskResp;<br />聽聽聽memcpy(&Ask,rcvbuf+offset,sizeof(cmd_ask));<br />聽聽聽offset+=sizeof(cmd_ask);<br />聽聽聽AskResp.cmd_type = CMD_ASK_RESP;<br />聽聽聽AskResp.Network_ID = Ask.Network_ID;<br />聽聽聽for(i=0; i<m_Connectnum; i++)<br />聽聽聽{<br />聽聽聽聽if(m_ClientInfo[i].Network_ID == Ask.Network_ID)<br />聽聽聽聽{<br />聽聽聽聽聽strcpy(AskResp.pData1,m_ClientInfo[i].User_Name);<br />聽聽聽聽聽strcat(AskResp.pData1, ":");<br />聽聽聽聽}<br />聽聽聽}<br />聽聽聽strcpy(AskResp.pData2, Ask.pData);<br />聽聽聽for(i=0; i<m_Connectnum; i++)<br />聽聽聽{<br />聽聽聽聽send(m_ClientInfo[i].Client_Socket, (char*)&AskResp, sizeof(AskResp), 0);<br />聽聽聽}</p> <p>聽聽聽break;<br />聽聽case CMD_GOODBYE:<br />聽聽聽closesocket(pSocket);<br />聽聽聽break;<br />聽聽default:<br />聽聽聽break;<br />聽聽}<br />聽}</p> <p>聽return TRUE;<br />}<br />BOOL CServerDlg::OnSend(SOCKET pSocket)<br />{<br />聽return TRUE;<br />}</p> <p>void CServerDlg::OnOK() <br />{<br />聽closesocket(m_ListenSocket);<br />聽WSACleanup();<br />聽CDialog::OnOK();<br />}</p> <p>void CServerDlg::OnTimer(UINT nIDEvent) <br />{<br />聽CTime m_current_time = CTime::GetCurrentTime();<br />聽CTimeSpan logintimes;<br />聽CString login_times;<br />聽CString networkid; <a href="file://鍒?"><font color="#336699">file://鍒?/font></a>琛ㄦ鐨勭綉緇淚D欏?br />聽<br />聽for(int i=0; i<m_Connectnum; i++)<br />聽{<br />聽聽logintimes = m_current_time - m_ClientInfo[i].Login_Time;<br />聽聽login_times.Format("%d灝忔椂%d鍒?d縐?, logintimes.GetHours(),<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 logintimes.GetMinutes(),<br />聽聽聽聽聽聽聽聽聽聽聽 logintimes.GetSeconds());<br />聽<br />聽聽pList->SetItemText (i,4,login_times);<br />聽}</p> <p>聽CDialog::OnTimer(nIDEvent);<br />}</p> <p> <br />// serverDlg.h : header file<br />//</p> <p>#if !defined(AFX_SERVERDLG_H__B0AA0367_C1F4_11D4_AB1C_0080C8D6FEA5__INCLUDED_)<br />#define AFX_SERVERDLG_H__B0AA0367_C1F4_11D4_AB1C_0080C8D6FEA5__INCLUDED_</p> <p>#if _MSC_VER > 1000<br />#pragma once<br />#endif // _MSC_VER > 1000</p> <p>#include "global.h"</p> <p>/////////////////////////////////////////////////////////////////////////////<br />// CServerDlg dialog</p> <p>class CServerDlg : public CDialog<br />{<br /><a href="file://鍏?"><font color="#336699">file://鍏?/font></a>灞鍑芥暟<br />聽聽聽 friend UINT KernelWorkThread(LPVOID pParam);<br />// Construction<br />public:<br />聽CListCtrl* pList; <a href="file://瀹?"><font color="#336699">file://瀹?/font></a>鎴風鍦ㄧ嚎淇℃伅鍒楄〃妗嗗璞?br />聽CImageList m_imagelist; </p> <p>聽SOCKET m_ListenSocket; <a href="file://鐢?"><font color="#336699">file://鐢?/font></a>浜庣洃鍚鍙g殑濂楁帴瀛?br />聽client_info m_ClientInfo[MAX_CLIENT_NUM]; <a href="file://淇?"><font color="#336699">file://淇?/font></a>瀛樺湪綰垮鎴風淇℃伅鐨勭粨鏋勪綋鏁扮粍<br />聽sockaddr_in clientaddr; <a href="file://淇?"><font color="#336699">file://淇?/font></a>瀛樺彂璧瘋繛鎺ョ殑瀹㈡埛绔湴鍧<br />聽int m_Connectnum; <a href="file://鍦?"><font color="#336699">file://鍦?/font></a>綰垮鎴風涓暟<br />聽int m_NetworkID;聽 <a href="file://榪?"><font color="#336699">file://榪?/font></a>鍥炵粰瀹㈡埛绔殑緗戠粶ID鍙?/p> <p>聽BOOL OnSend(SOCKET pSocket);聽聽聽 <a href="file://鍙?"><font color="#336699">file://鍙?/font></a>閫佹暟鎹綉緇滀簨浠剁殑鍝嶅簲鍑芥暟 <br />聽BOOL OnReceive(SOCKET pSocket); <a href="file://鎺?"><font color="#336699">file://鎺?/font></a>鏀舵暟鎹綉緇滀簨浠剁殑鍝嶅簲鍑芥暟聽<br />聽BOOL OnClose(SOCKET pSocket);聽聽 <a href="file://鍏?"><font color="#336699">file://鍏?/font></a>闂鎺ュ瓧緗戠粶浜嬩歡鐨勫搷搴斿嚱鏁?/p> <p>聽CServerDlg(CWnd* pParent = NULL);聽// standard constructor</p> <p>// Dialog Data<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_DATA(CServerDlg)<br />聽enum { IDD = IDD_SERVER_DIALOG };<br />聽聽// NOTE: the ClassWizard will add data members here<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_DATA</p> <p>聽// ClassWizard generated virtual function overrides<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_VIRTUAL(CServerDlg)<br />聽protected:<br />聽virtual void DoDataExchange(CDataExchange* pDX);聽// DDX/DDV support<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_VIRTUAL</p> <p>// Implementation<br />protected:<br />聽HICON m_hIcon;</p> <p>聽// Generated message map functions<br />聽<a href="file://{{/"><font color="#336699">file://{{</font></a>AFX_MSG(CServerDlg)<br />聽virtual BOOL OnInitDialog();<br />聽afx_msg void OnSysCommand(UINT nID, LPARAM lParam);<br />聽afx_msg void OnPaint();<br />聽afx_msg HCURSOR OnQueryDragIcon();<br />聽virtual void OnOK();<br />聽afx_msg void OnTimer(UINT nIDEvent);<br />聽<a href="file://}}/"><font color="#336699">file://}}</font></a>AFX_MSG<br />聽DECLARE_MESSAGE_MAP()<br />};</p> </td> </tr> </tbody> </table> <img src ="http://m.shnenglu.com/jjbird/aggbug/6333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/jjbird/" target="_blank">濂囧</a> 2006-04-26 17:30 <a href="http://m.shnenglu.com/jjbird/articles/6333.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>setsockopt()閫夐」鏀瑰杽紼嬪簭鐨勫仴澹?/title><link>http://m.shnenglu.com/jjbird/articles/6221.html</link><dc:creator>濂囧</dc:creator><author>濂囧</author><pubDate>Tue, 25 Apr 2006 01:14:00 GMT</pubDate><guid>http://m.shnenglu.com/jjbird/articles/6221.html</guid><wfw:comment>http://m.shnenglu.com/jjbird/comments/6221.html</wfw:comment><comments>http://m.shnenglu.com/jjbird/articles/6221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/jjbird/comments/commentRss/6221.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/jjbird/services/trackbacks/6221.html</trackback:ping><description><![CDATA[鍐欏嚭鎴戝湪緗戠粶緙栫▼涓殑涓鐐瑰績寰椾綋浼氾紝甯屾湜瀵逛粬(^_^涔熷澶у)鏈夊府鍔?<br />1. 濡傛灉鍦ㄥ凡緇忓浜?ESTABLISHED鐘舵佷笅鐨剆ocket(涓鑸敱绔彛鍙峰拰鏍囧織絎﹀尯鍒嗭級璋冪敤<br />closesocket錛堜竴鑸笉浼氱珛鍗沖叧闂岀粡鍘員IME_WAIT鐨勮繃紼嬶級鍚庢兂緇х畫閲嶇敤璇ocket錛?br />BOOL bReuseaddr=TRUE;<br />setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));<br />2. 濡傛灉瑕佸凡緇忓浜庤繛鎺ョ姸鎬佺殑soket鍦ㄨ皟鐢╟losesocket鍚庡己鍒跺叧闂紝涓嶇粡鍘?br />TIME_WAIT鐨勮繃紼嬶細<br />BOOL bDontLinger = FALSE; <br />setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));<br />3.鍦╯end(),recv()榪囩▼涓湁鏃剁敱浜庣綉緇滅姸鍐電瓑鍘熷洜錛屽彂鏀朵笉鑳介鏈熻繘琛?鑰岃緗敹鍙戞椂闄愶細<br />int nNetTimeout=1000;//1縐?br />//鍙戦佹椂闄?br />setsockopt(socket錛孲OL_S0CKET,SO_SNDTIMEO錛?char *)&nNetTimeout,sizeof(int));<br />//鎺ユ敹鏃墮檺<br />setsockopt(socket錛孲OL_S0CKET,SO_RCVTIMEO錛?char *)&nNetTimeout,sizeof(int));<br />4.鍦╯end()鐨勬椂鍊欙紝榪斿洖鐨勬槸瀹為檯鍙戦佸嚭鍘葷殑瀛楄妭(鍚屾)鎴栧彂閫佸埌socket緙撳啿鍖虹殑瀛楄妭<br />(寮傛);緋葷粺榛樿鐨勭姸鎬佸彂閫佸拰鎺ユ敹涓嬈′負8688瀛楄妭(綰︿負8.5K)錛涘湪瀹為檯鐨勮繃紼嬩腑鍙戦佹暟鎹?br />鍜屾帴鏀舵暟鎹噺姣旇緝澶э紝鍙互璁劇疆socket緙撳啿鍖猴紝鑰岄伩鍏嶄簡send(),recv()涓嶆柇鐨勫驚鐜敹鍙戯細<br />// 鎺ユ敹緙撳啿鍖?br />int nRecvBuf=32*1024;//璁劇疆涓?2K<br />setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));<br />//鍙戦佺紦鍐插尯<br />int nSendBuf=32*1024;//璁劇疆涓?2K<br />setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));<br />5. 濡傛灉鍦ㄥ彂閫佹暟鎹殑鏃訛紝甯屾湜涓嶇粡鍘嗙敱緋葷粺緙撳啿鍖哄埌socket緙撳啿鍖虹殑鎷瘋礉鑰屽獎鍝?br />紼嬪簭鐨勬ц兘錛?br />int nZero=0;<br />setsockopt(socket錛孲OL_S0CKET,SO_SNDBUF錛?char *)&nZero,sizeof(nZero));<br />6.鍚屼笂鍦╮ecv()瀹屾垚涓婅堪鍔熻兘(榛樿鎯呭喌鏄皢socket緙撳啿鍖虹殑鍐呭鎷瘋礉鍒扮郴緇熺紦鍐插尯)錛?br />int nZero=0;<br />setsockopt(socket錛孲OL_S0CKET,SO_RCVBUF錛?char *)&nZero,sizeof(int));<br />7.涓鑸湪鍙戦乁DP鏁版嵁鎶ョ殑鏃跺欙紝甯屾湜璇ocket鍙戦佺殑鏁版嵁鍏鋒湁騫挎挱鐗規э細<br />BOOL bBroadcast=TRUE; <br />setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL));<br />8.鍦╟lient榪炴帴鏈嶅姟鍣ㄨ繃紼嬩腑錛屽鏋滃浜庨潪闃誨妯″紡涓嬬殑socket鍦╟onnect()鐨勮繃紼嬩腑鍙?br />浠ヨ緗甤onnect()寤舵椂,鐩村埌accpet()琚懠鍙?鏈嚱鏁拌緗彧鏈夊湪闈為樆濉炵殑榪囩▼涓湁鏄捐憲鐨?br />浣滅敤錛屽湪闃誨鐨勫嚱鏁拌皟鐢ㄤ腑浣滅敤涓嶅ぇ)<br />BOOL bConditionalAccept=TRUE;<br />setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,sizeof(BOOL));<br />9.濡傛灉鍦ㄥ彂閫佹暟鎹殑榪囩▼涓?send()娌℃湁瀹屾垚錛岃繕鏈夋暟鎹病鍙戦?鑰岃皟鐢ㄤ簡closesocket(),浠ュ墠鎴戜滑<br />涓鑸噰鍙栫殑鎺柦鏄?浠庡鍏抽棴"shutdown(s,SD_BOTH),浣嗘槸鏁版嵁鏄偗瀹氫涪澶變簡錛屽浣曡緗紼嬪簭婊¤凍鍏蜂綋<br />搴旂敤鐨勮姹?鍗寵娌″彂瀹岀殑鏁版嵁鍙戦佸嚭鍘誨悗鍦ㄥ叧闂璼ocket)錛?br />struct linger {<br />u_short l_onoff;<br />u_short l_linger;<br />};<br />linger m_sLinger;<br />m_sLinger.l_onoff=1;//(鍦╟losesocket()璋冪敤,浣嗘槸榪樻湁鏁版嵁娌″彂閫佸畬姣曠殑鏃跺欏璁擱楃暀)<br />// 濡傛灉m_sLinger.l_onoff=0;鍒欏姛鑳藉拰2.)浣滅敤鐩稿悓;<br />m_sLinger.l_linger=5;//(瀹硅閫楃暀鐨勬椂闂翠負5縐?<br />setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger));<br />Note:1.鍦ㄨ緗簡閫楃暀寤舵椂錛岀敤浜庝竴涓潪闃誨鐨剆ocket鏄綔鐢ㄤ笉澶х殑錛屾渶濂戒笉鐢?<br />2.濡傛灉鎯寵紼嬪簭涓嶇粡鍘哠O_LINGER闇瑕佽緗甋O_DONTLINGER錛屾垨鑰呰緗甽_onoff=0錛?br />10.榪樹竴涓敤鐨勬瘮杈冨皯鐨勬槸鍦⊿DI鎴栬呮槸Dialog鐨勭▼搴忎腑錛屽彲浠ヨ褰晄ocket鐨勮皟璇曚俊鎭細<br />(鍓嶄笉涔呭仛榪囪繖涓嚱鏁扮殑嫻嬭瘯錛岃皟寮忎俊鎭彲浠ヤ繚瀛橈紝鍖呮嫭socket寤虹珛鏃跺欑殑鍙傛暟,閲囩敤鐨?br />鍏蜂綋鍗忚錛屼互鍙婂嚭閿欑殑浠g爜閮藉彲浠ヨ褰曚笅鏉ワ級<br />BOOL bDebug=TRUE;<br />setsockopt(s,SOL_SOCKET,SO_DEBUG,(const char*)&bDebug,sizeof(BOOL));<br />11.闄勫姞錛氬線寰閫氳繃setsockopt()璁劇疆浜嗙紦鍐插尯澶у皬錛屼絾榪樹笉鑳芥弧瓚蟲暟鎹殑浼犺緭闇姹傦紝<br />鎴戠殑涔犳儻鏄嚜宸卞啓涓鐞嗙綉緇滅紦鍐茬殑綾伙紝鍔ㄦ佸垎閰嶅唴瀛?涓嬮潰鎴戝皢榪欎釜綾誨啓鍑猴紝甯屾湜瀵?br />鍒濆鑰呮湁鎵甯姪錛?br /><br />//浠跨収String 鏀瑰啓鑰屾垚<br />//==============================================================================<br />// 浜岃繘鍒舵暟鎹紝涓昏鐢ㄤ簬鏀跺彂緗戠粶緙撳啿鍖虹殑鏁版嵁<br />// CNetIOBuffer 浠?MFC 綾?CString 鐨勬簮浠g爜浣滀負钃濇湰鏀瑰啓鑰屾垚錛岀敤娉曚笌 CString 綾諱技錛?br />// 浣嗘槸 CNetIOBuffer 涓瓨鏀劇殑鏄函綺圭殑浜岃繘鍒舵暟鎹紝'\0' 騫朵笉浣滀負瀹冪殑緇撴潫鏍囧織銆?br />// 鍏舵暟鎹暱搴﹀彲浠ラ氳繃 GetLength() 鑾峰緱錛岀紦鍐插尯鍦板潃鍙互閫氳繃榪愮畻絎?LPBYTE 鑾峰緱銆?br /><br /><br />//==============================================================================<br />// Copyright (c) All-Vision Corporation. All rights reserved.<br />// Module: NetObject<br />// File: SimpleIOBuffer.h<br />// Author: gdy119<br />// Email : <a href="mailto:8751webmaster@126.com"><font color="#22229c">8751webmaster@126.com</font></a><br />// Date: 2004.11.26<br />//==============================================================================<br />// NetIOBuffer.h<br />#ifndef _NETIOBUFFER_H<br />#define _NETIOBUFFER_H<br />//=============================================================================<br />#define MAX_BUFFER_LENGTH 1024*1024<br />//=============================================================================<br />//涓昏鐢ㄦ潵澶勭悊緗戠粶緙撳啿鐨勬暟鎹?br />class CNetIOBuffer <br />{<br />protected:<br />LPBYTE m_pbinData;<br />int m_nLength;<br />int m_nTotalLength;<br />CRITICAL_SECTIONm_cs;<br />void Initvalibers();<br />public:<br />CNetIOBuffer();<br />CNetIOBuffer(const LPBYTE lbbyte, int nLength);<br />CNetIOBuffer(const CNetIOBuffer&binarySrc);<br />virtual ~CNetIOBuffer();<br />//=============================================================================<br />BOOL CopyData(const LPBYTE lbbyte, int nLength);<br />BOOL ConcatData(const LPBYTE lbbyte, int nLength);<br />void ResetIoBuffer();<br />int GetLength() const;<br />BOOL SetLength(int nLen);<br />LPBYTE GetCurPos();<br />int GetRemainLen();<br />BOOL IsEmpty() const;<br />operator LPBYTE() const;<br />static GetMaxLength() { return MAX_BUFFER_LENGTH; }<br />const CNetIOBuffer& operator=(const CNetIOBuffer& buffSrc);<br />};<br />#endif // <br />// NetOBuffer.cpp: implementation of the CNetIOBuffer class.<br />//======================================================================<br />#include "stdafx.h"<br />#include "NetIOBuffer.h"<br />//======================================================================<br />//=======================================================================<br />// Construction/Destruction<br />CNetIOBuffer::CNetIOBuffer()<br />{<br />Initvalibers();<br /><br />}<br />CNetIOBuffer::CNetIOBuffer(const LPBYTE lbbyte, int nLength)<br />{<br />Initvalibers();<br />CopyData(lbbyte, nLength);<br />}<br />CNetIOBuffer::~CNetIOBuffer()<br />{<br />delete []m_pbinData;<br />m_pbinData=NULL;<br />DeleteCriticalSection(&m_cs);<br /><br />}<br />CNetIOBuffer::CNetIOBuffer(const CNetIOBuffer&binarySrc)<br />{<br /><br />Initvalibers();<br />CopyData(binarySrc,binarySrc.GetLength());<br /><br />}<br />void CNetIOBuffer::Initvalibers()<br />{<br /><br />m_pbinData = NULL;<br />m_nLength = 0;<br />m_nTotalLength = MAX_BUFFER_LENGTH;<br />if(m_pbinData==NULL)<br />{<br />m_pbinData=new BYTE[m_nTotalLength];<br />ASSERT(m_pbinData!=NULL);<br />}<br />InitializeCriticalSection(&m_cs);<br />}<br />void CNetIOBuffer::ResetIoBuffer()<br />{<br />EnterCriticalSection(&m_cs);<br />m_nLength = 0;<br />memset(m_pbinData,0,m_nTotalLength);<br />LeaveCriticalSection(&m_cs);<br />}<br /><br />BOOL CNetIOBuffer::CopyData(const LPBYTE lbbyte, int nLength)<br />{<br />if( nLength > MAX_BUFFER_LENGTH )<br />return FALSE;<br /><br />ResetIoBuffer();<br />EnterCriticalSection(&m_cs);<br />memcpy(m_pbinData, lbbyte, nLength );<br />m_nLength = nLength;<br />LeaveCriticalSection(&m_cs);<br /><br />return TRUE;<br />}<br /><br />BOOL CNetIOBuffer::ConcatData(const LPBYTE lbbyte, int nLength)<br />{<br />if( m_nLength + nLength > MAX_BUFFER_LENGTH )<br />return FALSE;<br /><br />EnterCriticalSection(&m_cs);<br />memcpy(m_pbinData+m_nLength, lbbyte, nLength );<br />m_nLength += nLength;<br />LeaveCriticalSection(&m_cs);<br /><br />return TRUE;<br />}<br /><br />int CNetIOBuffer::GetLength() const<br />{<br />return m_nLength;<br />}<br /><br />BOOL CNetIOBuffer::SetLength(int nLen)<br />{<br />if( nLen > MAX_BUFFER_LENGTH )<br />return FALSE;<br /><br />EnterCriticalSection(&m_cs);<br />m_nLength = nLen;<br />LeaveCriticalSection(&m_cs);<br /><br />return TRUE;<br />}<br /><br />LPBYTE CNetIOBuffer::GetCurPos()<br />{<br /><br />if( m_nLength < MAX_BUFFER_LENGTH )<br /><br />return (m_pbinData+m_nLength);<br /><br />else<br />return NULL;<br />}<br /><br />CNetIOBuffer:: operator LPBYTE() const<br />{<br />return m_pbinData;<br />}<br /><br />int CNetIOBuffer::GetRemainLen()<br />{<br /><br />return MAX_BUFFER_LENGTH - m_nLength;<br /><br />}<br />BOOL CNetIOBuffer::IsEmpty() const<br />{<br />return m_nLength == 0;<br />}<br /><br />const CNetIOBuffer& CNetIOBuffer:: operator=(const CNetIOBuffer& buffSrc)<br />{<br />if(&buffSrc!=this)<br />{<br />CopyData(buffSrc, buffSrc.GetLength());<br /><br />}<br />return *this;<br /><br />}<br /><br /><br /><br />12.鍙戦佹暟鎹椂鍊欎竴鑸槸緋葷粺緙撳啿鍖烘弧浠ュ悗鎵嶅彂閫侊紝鐜板湪璁劇疆涓哄彧瑕佺郴緇?br />緙撳啿鍖烘湁鏁版嵁灝辯珛鍒誨彂閫侊細 <br />BOOL bNodelay=TRUE;<br />SetSockOpt(s,IPPROTO_TCP,TCP_NODELAY,(const char*)&bNodelayt,sizeof(BOOL));<br /><br />闄勫姞錛?br />setoptsock錛堬級榪欎釜鍑芥暟 璁劇疆鎴愮鍙e鐢ㄧ殑鏃跺欙紝寰堝鏄撳涓浜涙病鏈夎繘琛屽崟鐙琤ind妯″紡鐨勭▼搴忛犳垚鍗卞銆?br />姣斿old鐨?ping icmp door錛岀畝鍗曠殑sniffer鍚庯紝鏀跺埌鍖咃紝鐒跺悗璁劇疆setoptsock bind web鏈嶅姟錛岀劧鍚庡緩绔嬩釜cmd榪涚▼ bind鍐?0绔彛銆?<img src ="http://m.shnenglu.com/jjbird/aggbug/6221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/jjbird/" target="_blank">濂囧</a> 2006-04-25 09:14 <a href="http://m.shnenglu.com/jjbird/articles/6221.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍥炶皟鏈哄埗http://m.shnenglu.com/jjbird/articles/3364.html濂囧濂囧Tue, 21 Feb 2006 02:26:00 GMThttp://m.shnenglu.com/jjbird/articles/3364.htmlhttp://m.shnenglu.com/jjbird/comments/3364.htmlhttp://m.shnenglu.com/jjbird/articles/3364.html#Feedback0http://m.shnenglu.com/jjbird/comments/commentRss/3364.htmlhttp://m.shnenglu.com/jjbird/services/trackbacks/3364.html杞歡妯″潡涔嬮棿鎬繪槸瀛樺湪鐫涓瀹氱殑鎺ュ彛錛屼粠璋冪敤鏂瑰紡涓婏紝鍙互鎶婁粬浠垎涓轟笁綾伙細鍚屾璋冪敤銆佸洖璋冨拰寮傛璋冪敤銆傚悓姝ヨ皟鐢ㄦ槸涓縐嶉樆濉炲紡璋冪敤錛岃皟鐢ㄦ柟瑕佺瓑寰呭鏂規墽琛屽畬姣曟墠榪斿洖錛屽畠鏄竴縐嶅崟鍚戣皟鐢紱鍥炶皟鏄竴縐嶅弻鍚戣皟鐢ㄦā寮忥紝涔熷氨鏄錛岃璋冪敤鏂瑰湪鎺ュ彛琚皟鐢ㄦ椂涔熶細璋冪敤瀵規柟鐨勬帴鍙o紱寮傛璋冪敤鏄竴縐嶇被浼兼秷鎭垨浜嬩歡鐨勬満鍒訛紝涓嶈繃瀹冪殑璋冪敤鏂瑰悜鍒氬ソ鐩稿弽錛屾帴鍙g殑鏈嶅姟鍦ㄦ敹鍒版煇縐嶈鎭垨鍙戠敓鏌愮浜嬩歡鏃訛紝浼氫富鍔ㄩ氱煡瀹㈡埛鏂癸紙鍗寵皟鐢ㄥ鎴鋒柟鐨勬帴鍙o級銆傚洖璋冨拰寮傛璋冪敤鐨勫叧緋婚潪甯哥揣瀵嗭紝閫氬父鎴戜滑浣跨敤鍥炶皟鏉ュ疄鐜板紓姝ユ秷鎭殑娉ㄥ唽錛岄氳繃寮傛璋冪敤鏉ュ疄鐜版秷鎭殑閫氱煡銆傚悓姝ヨ皟鐢ㄦ槸涓夎呭綋涓渶綆鍗曠殑錛岃屽洖璋冨張甯稿父鏄紓姝ヨ皟鐢ㄧ殑鍩虹錛屽洜姝わ紝涓嬮潰鎴戜滑鐫閲嶈璁哄洖璋冩満鍒跺湪涓嶅悓杞歡鏋舵瀯涓殑瀹炵幇銆?/BLOCKQUOTE>

1 浠涔堟槸鍥炶皟
杞歡妯″潡涔嬮棿鎬繪槸瀛樺湪鐫涓瀹氱殑鎺ュ彛錛屼粠璋冪敤鏂瑰紡涓婏紝鍙互鎶婁粬浠垎涓轟笁綾伙細鍚屾璋冪敤銆佸洖璋冨拰寮傛璋冪敤銆傚悓姝ヨ皟鐢ㄦ槸涓縐嶉樆濉炲紡璋冪敤錛岃皟鐢ㄦ柟瑕佺瓑寰呭鏂規墽琛屽畬姣曟墠榪斿洖錛屽畠鏄竴縐嶅崟鍚戣皟鐢紱鍥炶皟鏄竴縐嶅弻鍚戣皟鐢ㄦā寮忥紝涔熷氨鏄錛岃璋冪敤鏂瑰湪鎺ュ彛琚皟鐢ㄦ椂涔熶細璋冪敤瀵規柟鐨勬帴鍙o紱寮傛璋冪敤鏄竴縐嶇被浼兼秷鎭垨浜嬩歡鐨勬満鍒訛紝涓嶈繃瀹冪殑璋冪敤鏂瑰悜鍒氬ソ鐩稿弽錛屾帴鍙g殑鏈嶅姟鍦ㄦ敹鍒版煇縐嶈鎭垨鍙戠敓鏌愮浜嬩歡鏃訛紝浼氫富鍔ㄩ氱煡瀹㈡埛鏂癸紙鍗寵皟鐢ㄥ鎴鋒柟鐨勬帴鍙o級銆傚洖璋冨拰寮傛璋冪敤鐨勫叧緋婚潪甯哥揣瀵嗭紝閫氬父鎴戜滑浣跨敤鍥炶皟鏉ュ疄鐜板紓姝ユ秷鎭殑娉ㄥ唽錛岄氳繃寮傛璋冪敤鏉ュ疄鐜版秷鎭殑閫氱煡銆傚悓姝ヨ皟鐢ㄦ槸涓夎呭綋涓渶綆鍗曠殑錛岃屽洖璋冨張甯稿父鏄紓姝ヨ皟鐢ㄧ殑鍩虹錛屽洜姝わ紝涓嬮潰鎴戜滑鐫閲嶈璁哄洖璋冩満鍒跺湪涓嶅悓杞歡鏋舵瀯涓殑瀹炵幇銆?


瀵逛簬涓嶅悓綾誨瀷鐨勮璦錛堝緇撴瀯鍖栬璦鍜屽璞¤璦錛夈佸鉤鍙幫紙Win32銆丣DK錛夋垨鏋勬灦錛圕ORBA銆丏COM銆乄ebService錛夛紝瀹㈡埛鍜屾湇鍔$殑浜や簰闄や簡鍚屾鏂瑰紡浠ュ錛岄兘闇瑕佸叿澶囦竴瀹氱殑寮傛閫氱煡鏈哄埗錛岃鏈嶅姟鏂癸紙鎴栨帴鍙f彁渚涙柟錛夊湪鏌愪簺鎯呭喌涓嬭兘澶熶富鍔ㄩ氱煡瀹㈡埛錛岃屽洖璋冩槸瀹炵幇寮傛鐨勪竴涓渶綆鎹風殑閫斿緞銆?

瀵逛簬涓鑸殑緇撴瀯鍖栬璦錛屽彲浠ラ氳繃鍥炶皟鍑芥暟鏉ュ疄鐜板洖璋冦傚洖璋冨嚱鏁頒篃鏄竴涓嚱鏁版垨榪囩▼錛屼笉榪囧畠鏄竴涓敱璋冪敤鏂硅嚜宸卞疄鐜幫紝渚涜璋冪敤鏂逛嬌鐢ㄧ殑鐗規畩鍑芥暟銆?

鍦ㄩ潰鍚戝璞$殑璇█涓紝鍥炶皟鍒欐槸閫氳繃鎺ュ彛鎴栨娊璞$被鏉ュ疄鐜扮殑錛屾垜浠妸瀹炵幇榪欑鎺ュ彛鐨勭被鎴愪負鍥炶皟綾伙紝鍥炶皟綾葷殑瀵硅薄鎴愪負鍥炶皟瀵硅薄銆傚浜庤薄C++鎴朞bject Pascal榪欎簺鍏煎浜嗚繃紼嬬壒鎬х殑瀵硅薄璇█錛屼笉浠呮彁渚涗簡鍥炶皟瀵硅薄銆佸洖璋冩柟娉曠瓑鐗規э紝涔熻兘鍏煎榪囩▼璇█鐨勫洖璋冨嚱鏁版満鍒躲?

Windows騫沖彴鐨勬秷鎭満鍒朵篃鍙互鐪嬩綔鏄洖璋冪殑涓縐嶅簲鐢紝鎴戜滑閫氳繃緋葷粺鎻愪緵鐨勬帴鍙f敞鍐屾秷鎭鐞嗗嚱鏁幫紙鍗沖洖璋冨嚱鏁幫級錛屼粠鑰屽疄鐜版帴鏀躲佸鐞嗘秷鎭殑鐩殑銆傜敱浜嶹indows騫沖彴鐨凙PI鏄敤C璇█鏉ユ瀯寤虹殑錛屾垜浠彲浠ヨ涓哄畠涔熸槸鍥炶皟鍑芥暟鐨勪竴涓壒渚嬨?

瀵逛簬鍒嗗竷寮忕粍浠朵唬鐞嗕綋緋籆ORBA錛屽紓姝ュ鐞嗘湁澶氱鏂瑰紡錛屽鍥炶皟銆佷簨浠舵湇鍔°侀氱煡鏈嶅姟絳夈備簨浠舵湇鍔″拰閫氱煡鏈嶅姟鏄疌ORBA鐢ㄦ潵澶勭悊寮傛娑堟伅鐨勬爣鍑嗘湇鍔★紝浠栦滑涓昏璐熻矗娑堟伅鐨勫鐞嗐佹淳鍙戙佺淮鎶ょ瓑宸ヤ綔銆傚涓浜涚畝鍗曠殑寮傛澶勭悊榪囩▼錛屾垜浠彲浠ラ氳繃鍥炶皟鏈哄埗鏉ュ疄鐜般?

涓嬮潰鎴戜滑闆嗕腑姣旇緝鍏鋒湁浠h〃鎬х殑璇█錛圕銆丱bject Pascal錛夊拰鏋舵瀯錛圕ORBA錛夋潵鍒嗘瀽鍥炶皟鐨勫疄鐜版柟寮忋佸叿浣撲綔鐢ㄧ瓑銆?

2 榪囩▼璇█涓殑鍥炶皟錛圕錛?/SPAN>

2.1 鍑芥暟鎸囬拡
鍥炶皟鍦–璇█涓槸閫氳繃鍑芥暟鎸囬拡鏉ュ疄鐜扮殑,閫氳繃灝嗗洖璋冨嚱鏁扮殑鍦板潃浼犵粰琚皟鍑芥暟浠庤屽疄鐜板洖璋冦傚洜姝わ紝瑕佸疄鐜板洖璋冿紝蹇呴』棣栧厛瀹氫箟鍑芥暟鎸囬拡錛岃鐪嬩笅闈㈢殑渚嬪瓙錛?


void Func(char *s)錛?/ 鍑芥暟鍘熷瀷
void (*pFunc) (char *);//鍑芥暟鎸囬拡

鍙互鐪嬪嚭錛屽嚱鏁扮殑瀹氫箟鍜屽嚱鏁版寚閽堢殑瀹氫箟闈炲父綾諱技銆?

涓鑸殑鍖栵紝涓轟簡綆鍖栧嚱鏁版寚閽堢被鍨嬬殑鍙橀噺瀹氫箟錛屾彁楂樼▼搴忕殑鍙鎬э紝鎴戜滑闇瑕佹妸鍑芥暟鎸囬拡綾誨瀷鑷畾涔変竴涓嬨?


typedef void(*pcb)(char *);

鍥炶皟鍑芥暟鍙互璞℃櫘閫氬嚱鏁頒竴鏍瘋紼嬪簭璋冪敤錛屼絾鏄彧鏈夊畠琚綋浣滃弬鏁頒紶閫掔粰琚皟鍑芥暟鏃舵墠鑳界О浣滃洖璋冨嚱鏁般?

琚皟鍑芥暟鐨勪緥瀛愶細


void GetCallBack(pcb callback)
{
/*do something*/
}
鐢ㄦ埛鍦ㄨ皟鐢ㄤ笂闈㈢殑鍑芥暟鏃訛紝闇瑕佽嚜宸卞疄鐜頒竴涓猵cb綾誨瀷鐨勫洖璋冨嚱鏁幫細
void fCallback(char *s) 
{
/* do something */
} 
鐒跺悗錛屽氨鍙互鐩存帴鎶奻Callback褰撲綔涓涓彉閲忎紶閫掔粰GetCallBack,
GetCallBack錛坒Callback錛?

濡傛灉璧嬩簡涓嶅悓鐨勫肩粰璇ュ弬鏁幫紝閭d箞璋冪敤鑰呭皢璋冪敤涓嶅悓鍦板潃鐨勫嚱鏁般傝祴鍊煎彲浠ュ彂鐢熷湪榪愯鏃訛紝榪欐牱浣夸綘鑳藉疄鐜板姩鎬佺粦瀹氥?

2.2 鍙傛暟浼犻掕鍒?/SPAN>
鍒扮洰鍓嶄負姝紝鎴戜滑鍙璁轟簡鍑芥暟鎸囬拡鍙婂洖璋冭屾病鏈夊幓娉ㄦ剰ANSI C/C++鐨勭紪璇戝櫒瑙勮寖銆傝澶氱紪璇戝櫒鏈夊嚑縐嶈皟鐢ㄨ鑼冦傚鍦╒isual C++涓紝鍙互鍦ㄥ嚱鏁扮被鍨嬪墠鍔燺cdecl錛宊stdcall鎴栬卂pascal鏉ヨ〃紺哄叾璋冪敤瑙勮寖錛堥粯璁や負_cdecl錛夈侰++ Builder涔熸敮鎸乢fastcall璋冪敤瑙勮寖銆傝皟鐢ㄨ鑼冨獎鍝嶇紪璇戝櫒浜х敓鐨勭粰瀹氬嚱鏁板悕錛屽弬鏁頒紶閫掔殑欏哄簭錛堜粠鍙沖埌宸︽垨浠庡乏鍒板彸錛夛紝鍫嗘爤娓呯悊璐d換錛堣皟鐢ㄨ呮垨鑰呰璋冪敤鑰咃級浠ュ強鍙傛暟浼犻掓満鍒訛紙鍫嗘爤錛孋PU瀵勫瓨鍣ㄧ瓑錛夈?

灝嗚皟鐢ㄨ鑼冪湅鎴愭槸鍑芥暟綾誨瀷鐨勪竴閮ㄥ垎鏄緢閲嶈鐨勶紱涓嶈兘鐢ㄤ笉鍏煎鐨勮皟鐢ㄨ鑼冨皢鍦板潃璧嬪肩粰鍑芥暟鎸囬拡銆備緥濡傦細


// 琚皟鐢ㄥ嚱鏁版槸浠nt涓哄弬鏁幫紝浠nt涓鴻繑鍥炲?
__stdcall int callee(int); 

// 璋冪敤鍑芥暟浠ュ嚱鏁版寚閽堜負鍙傛暟
void caller( __cdecl int(*ptr)(int)); 

// 鍦╬涓紒鍥懼瓨鍌ㄨ璋冪敤鍑芥暟鍦板潃鐨勯潪娉曟搷浣?
__cdecl int(*p)(int) = callee; // 鍑洪敊

鎸囬拡p鍜宑allee()鐨勭被鍨嬩笉鍏煎錛屽洜涓哄畠浠湁涓嶅悓鐨勮皟鐢ㄨ鑼冦傚洜姝や笉鑳藉皢琚皟鐢ㄨ呯殑鍦板潃璧嬪肩粰鎸囬拡p錛屽敖綆′袱鑰呮湁鐩稿悓鐨勮繑鍥炲煎拰鍙傛暟鍒?

2.3 搴旂敤涓句緥
C璇█鐨勬爣鍑嗗簱鍑芥暟涓緢澶氬湴鏂瑰氨閲囩敤浜嗗洖璋冨嚱鏁版潵璁╃敤鎴峰畾鍒跺鐞嗚繃紼嬨傚甯哥敤鐨勫揩閫熸帓搴忓嚱鏁般佷簩鍒嗘悳绱㈠嚱鏁扮瓑銆?

蹇熸帓搴忓嚱鏁板師鍨嬶細


void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));
浜屽垎鎼滅儲鍑芥暟鍘熷瀷錛?
void *bsearch(const void *key, const void *base, size_t nelem,
				 size_t width, int (_USERENTRY *fcmp)(const void *, const void *));

鍏朵腑fcmp灝辨槸涓涓洖璋冨嚱鏁扮殑鍙橀噺銆?

涓嬮潰緇欏嚭涓涓叿浣撶殑渚嬪瓙錛?


#include <stdio.h>
#include <stdlib.h>

int sort_function( const void *a, const void *b);
int list[5] = { 54, 21, 11, 67, 22 };

int main(void)
{
   int  x;

   qsort((void *)list, 5, sizeof(list[0]), sort_function);
   for (x = 0; x < 5; x++)
      printf("%i\n", list[x]);
   return 0;
}

int sort_function( const void *a, const void *b)
{
   return *(int*)a-*(int*)b;
}

2.4 闈㈠悜瀵硅薄璇█涓殑鍥炶皟錛圖elphi錛?

Dephi涓嶤++涓鏍鳳紝涓轟簡淇濇寔涓庤繃紼嬭璦Pascal鐨勫吋瀹規э紝瀹冨湪寮曞叆闈㈠悜瀵硅薄鏈哄埗鐨勫悓鏃訛紝淇濈暀浜嗕互鍓嶇殑緇撴瀯鍖栫壒鎬с傚洜姝わ紝瀵瑰洖璋冪殑瀹炵幇錛屼篃鏈変袱縐嶆埅鐒朵笉鍚岀殑妯″紡錛屼竴縐嶆槸緇撴瀯鍖栫殑鍑芥暟鍥炶皟妯″紡錛屼竴縐嶆槸闈㈠悜瀵硅薄鐨勬帴鍙fā寮忋?

2.4.1 鍥炶皟鍑芥暟

鍥炶皟鍑芥暟綾誨瀷瀹氫箟錛?


type
   TCalcFunc=function (a:integer;b:integer):integer;

鎸夌収鍥炶皟鍑芥暟鐨勬牸寮忚嚜瀹氫箟鍑芥暟鐨勫疄鐜幫紝濡?/P>

function Add(a:integer;b:integer):integer
begin
  result:=a+b;
end;
function Sub(a:integer;b:integer):integer
begin
  result:=a-b;
end;

鍥炶皟鐨勪嬌鐢?/P>

function Calc(calc:TcalcFunc;a:integer;b:integer):integer

涓嬮潰錛屾垜浠氨鍙互鍦ㄦ垜浠殑紼嬪簭閲屾寜鐓ч渶瑕佽皟鐢ㄨ繖涓や釜鍑芥暟浜?/P>

c:=calc(add,a,b);//c=a+b
c:=calc(sub,a,b);//c=a-b

2.4.2 鍥炶皟瀵硅薄

浠涔堝彨鍥炶皟瀵硅薄鍛紝瀹冨叿浣撶敤鍦ㄥ摢浜涘満鍚堬紵棣栧厛錛岃鎴戜滑鎶婂畠涓庡洖璋冨嚱鏁板姣斾竴涓嬶紝鍥炶皟鍑芥暟鏄竴涓畾涔変簡鍑芥暟鐨勫師鍨嬶紝鍑芥暟浣撳垯浜ょ敱絎笁鏂規潵瀹炵幇鐨勪竴縐嶅姩鎬佸簲鐢ㄦā寮忋傝瀹炵幇涓涓洖璋冨嚱鏁幫紝鎴戜滑蹇呴』鏄庣‘鐭ラ亾鍑犵偣錛氳鍑芥暟闇瑕侀偅浜涘弬鏁幫紝榪斿洖浠涔堢被鍨嬬殑鍊箋傚悓鏍鳳紝涓涓洖璋冨璞′篃鏄竴涓畾涔変簡瀵硅薄鎺ュ彛錛屼絾鏄病鏈夊叿浣撳疄鐜扮殑鎶借薄綾伙紙鍗蟲帴鍙o級銆傝瀹炵幇涓涓洖璋冨璞★紝鎴戜滑蹇呴』鐭ラ亾錛氬畠闇瑕佸疄鐜板摢浜涙柟娉曪紝姣忎釜鏂規硶涓湁鍝簺鍙傛暟錛岃鏂規硶闇瑕佹斁鍥炰粈涔堝箋?

鍥犳錛屽湪鍥炶皟瀵硅薄榪欑搴旂敤妯″紡涓紝鎴戜滑浼氱敤鍒版帴鍙c傛帴鍙e彲浠ョ悊瑙f垚涓涓畾涔夊ソ浜嗕絾鏄病鏈夊疄鐜扮殑綾伙紝瀹冨彧鑳介氳繃緇ф壙鐨勬柟寮忚鍒殑綾誨疄鐜般侱elphi涓殑鎺ュ彛鍜孋OM鎺ュ彛綾諱技錛屾墍鏈夌殑鎺ュ彛閮界戶鎵夸笌IInterface錛堢瓑鍚屼簬IUnknow錛夛紝騫朵笖瑕佸疄鐜頒笁涓熀鏈殑鏂規硶QueryInterface, _AddRef, 鍜宊Release銆?

  • 瀹氫箟涓涓帴鍙?
    
    type IShape=interface(IInterface)
    	procedure Draw;
    end
    
  • 瀹炵幇鍥炶皟綾?
    
    type TRect=class(TObject,IShape)
    	protected
          function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
          function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
        public
    	  procedure Draw;
    end;
    
    type TRound=class(TObject,IShape)
    	protected
          function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
          function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
        public
    	  procedure Draw;
    end;
    
  • 浣跨敤鍥炶皟瀵硅薄
    
    procedure MyDraw(shape:IShape);
    var 
    shape:IShape;
    begin
    shape.Draw; 
    end;
    

濡傛灉浼犲叆鐨勫璞′負TRect錛岄偅涔堢敾鐭╁艦錛涘鏋滀負TRound錛岄偅涔堝氨涓哄渾褰€傜敤鎴蜂篃鍙互鎸夌収鑷繁鐨勬剰鍥炬潵瀹炵幇IShape鎺ュ彛錛岀敾鍑鴻嚜宸辯殑鍥懼艦錛?


MyDraw(Trect.Create);
MyDraw(Tround.Create);

2.4.3 鍥炶皟鏂規硶

鍥炶皟鏂規硶(Callback Method)鍙互鐪嬩綔鏄洖璋冨璞$殑涓閮ㄥ垎錛孌elphi瀵箇indows娑堟伅鐨勫皝瑁呭氨閲囩敤浜嗗洖璋冩柟娉曡繖涓蹇點傚湪鏈変簺鍦哄悎錛屾垜浠笉闇瑕佹寜鐓х粰瀹氱殑瑕佹眰瀹炵幇鏁翠釜瀵硅薄錛岃屽彧瑕佸疄鐜板叾涓殑涓涓柟娉曞氨鍙互浜嗭紝榪欐槸鎴戜滑灝變細鐢ㄥ埌鍥炶皟鏂規硶銆?

鍥炶皟鏂規硶鐨勫畾涔夊涓嬶細


TNotifyEvent = procedure(Sender: TObject) of object; 
TMyEvent=procedure(Sender:Tobject;EventId:Integer) of object;

TNotifyEvent 鏄疍elphi涓渶甯哥敤鐨勫洖璋冩柟娉曪紝紿椾綋銆佹帶浠剁殑寰堝浜嬩歡錛屽鍗曞嚮浜嬩歡銆佸叧闂簨浠剁瓑閮芥槸閲囩敤浜員notifyEvent銆傚洖璋冩柟娉曠殑鍙橀噺涓鑸氳繃浜嬩歡灞炴х殑鏂瑰紡鏉ュ畾涔夛紝濡俆CustomForm鐨勫垱寤轟簨浠剁殑瀹氫箟錛?


property OnCreate: TNotifyEvent read FOnCreate write FOnCreate stored IsForm;

鎴戜滑閫氳繃緇欎簨浠跺睘鎬у彉閲忚祴鍊煎氨鍙互瀹氬埗浜嬩歡澶勭悊鍣ㄣ?/P>

鐢ㄦ埛瀹氫箟瀵硅薄錛堝寘鍚洖璋冩柟娉曠殑瀵硅薄錛夛細


type TCallback=Class
    procedure ClickFunc(sender:TObject);
end;
procedure Tcallback.ClickFunc(sender:TObject);
begin
  showmessage('the caller is clicked!');
end;

紿椾綋瀵硅薄錛?/P>

type TCustomFrm=class(TForm)
  public
	procedure RegisterClickFunc(cb:procedure(sender:Tobject) of object);
end;

procedure TcustomFrm..RegisterClickFunc(cb:TNotifyEvent);
begin
  self.OnClick=cb;
end;

浣跨敤鏂規硶錛?/P>

var
  frm:TcustomFrm;
begin
  frm:=TcustomFrm.Create(Application);
  frm.RegisterClickFunc(Tcallback.Create().ClickFunc);
end;

3 鍥炶皟鍦ㄥ垎甯冨紡璁$畻涓殑搴旂敤錛圕ORBA錛?/SPAN>

3.1 鍥炶皟鎺ュ彛妯″瀷
CORBA鐨勬秷鎭紶閫掓満鍒舵湁寰堝縐嶏紝姣斿鍥炶皟鎺ュ彛銆佷簨浠舵湇鍔″拰閫氱煡鏈嶅姟絳夈傚洖璋冩帴鍙g殑鍘熺悊寰堢畝鍗曪紝CORBA瀹㈡埛鍜屾湇鍔″櫒閮藉叿鏈夊弻閲嶈鑹詫紝鍗沖厖褰撴湇鍔″櫒涔熸槸瀹㈡埛瀹㈡埛銆?

鍥炶皟鎺ュ彛鐨勫弽鍚戣皟鐢ㄤ笌姝e悜璋冪敤寰寰鏄悓鏃惰繘琛岀殑錛屽鏋滄湇鍔$澶氭璋冪敤璇ュ洖璋冩帴鍙o紝閭d箞榪欎釜鍥炶皟鎺ュ彛灝卞彉鎴愬紓姝ユ帴鍙d簡銆傚洜姝わ紝鍥炶皟鎺ュ彛鍦–ORBA涓父甯稿厖褰撲簨浠舵敞鍐岀殑鐢ㄩ旓紝瀹㈡埛绔皟鐢ㄨ娉ㄥ唽鍑芥暟鏃訛紝瀹㈡埛鍑芥暟灝辨槸鍥炶皟鍑芥暟錛屽湪姝ゅ悗鐨勮皟鐢ㄤ腑錛岀敱浜庝笉闇瑕佸鎴風鐨勪富鍔ㄥ弬涓庯紝璇ュ嚱鏁板氨鏄疄鐜頒簡涓縐嶅紓姝ユ満鍒躲?

浠嶤ORBA瑙勮寖鎴戜滑鐭ラ亾錛屼竴涓狢ORBA鎺ュ彛鍦ㄦ湇鍔$鍜屽鎴風鏈変笉鍚岀殑琛ㄧ幇褰㈠紡錛屽湪瀹㈡埛绔竴鑸嬌鐢ㄦ々錛圫tub錛夋枃浠訛紝鏈嶅姟绔垯鐢ㄥ埌妗嗘灦錛圫keleton錛夋枃浠訛紝鎺ュ彛鐨勮鏍奸噰鐢↖DL鏉ュ畾涔夈傝屽洖璋冨嚱鏁扮殑寮曞叆錛屼嬌寰楁湇鍔$鍜屽鎴風閮介渶瑕佸疄鐜頒竴瀹氱殑妗╁拰妗嗘灦銆備笅闈㈡槸鍥炶皟鎺ュ彛鐨勫疄鐜版ā鍨嬶細

3.1.1 鑼冧緥

涓嬮潰緇欏嚭浜嗕竴涓嬌鐢ㄥ洖璋冪殑鎺ュ彛鏂囦歡錛屾湇鍔$闇瑕佸疄鐜癝erver鎺ュ彛鐨勬鏋訛紝瀹㈡埛绔渶瑕佸疄鐜癈allBack鐨勬鏋訛細


module cb
{
	interface CallBack;
	interface Server;

interface CallBack 
{
    	void OnEvent(in long Source,in long msg);
};
  	interface Server 
{
    	long RegisterCB(in CallBack cb);
		void UnRegisterCB(in long hCb);
};
};

瀹㈡埛绔鍏堥氳繃鍚屾鏂瑰紡璋冪敤鏈嶅姟绔殑鎺ュ彛RegistCB錛岀敤鏉ユ敞鍐屽洖璋冩帴鍙allBack銆傛湇鍔$鏀跺埌璇ヨ姹備互鍚庯紝灝變細淇濈暀璇ユ帴鍙e紩鐢紝濡傛灉鍙戠敓鏌愮浜嬩歡闇瑕佸悜瀹㈡埛绔氱煡鐨勬椂鍊欏氨閫氳繃璇ュ紩鐢ㄨ皟鐢ㄥ鎴鋒柟鐨凮nEvent鍑芥暟錛屼互渚垮鏂瑰強鏃跺鐞嗐?nbsp; 



濂囧 2006-02-21 10:26 鍙戣〃璇勮
]]>
GRID涓殑浜嬩歡http://m.shnenglu.com/jjbird/articles/3271.html濂囧濂囧Wed, 15 Feb 2006 09:21:00 GMThttp://m.shnenglu.com/jjbird/articles/3271.htmlhttp://m.shnenglu.com/jjbird/comments/3271.htmlhttp://m.shnenglu.com/jjbird/articles/3271.html#Feedback0http://m.shnenglu.com/jjbird/comments/commentRss/3271.htmlhttp://m.shnenglu.com/jjbird/services/trackbacks/3271.html//{{AFX_EVENTSINK_MAP(CDlgUserManager)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -600 /* Click */, OnClickUserManagerGrid, VTS_NONE)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -601 /* DblClick */, OnDblClickUserManagerGrid, VTS_NONE)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -602 /* KeyDown */, OnKeyDownUserManagerGrid, VTS_PI2 VTS_I2)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, 74 /* Compare */, OnCompareUserManagerGrid, VTS_I4 VTS_I4 VTS_PI2)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -603 /* KeyPress */, OnKeyPressUserManagerGrid, VTS_PI2)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -605 /* MouseDown */, OnMouseDownUserManagerGrid, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
}}//AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

濂囧 2006-02-15 17:21 鍙戣〃璇勮
]]>
mysql鐨勪竴浜涜娉曞拰C APIhttp://m.shnenglu.com/jjbird/articles/2993.html濂囧濂囧Mon, 23 Jan 2006 09:36:00 GMThttp://m.shnenglu.com/jjbird/articles/2993.htmlhttp://m.shnenglu.com/jjbird/comments/2993.htmlhttp://m.shnenglu.com/jjbird/articles/2993.html#Feedback0http://m.shnenglu.com/jjbird/comments/commentRss/2993.htmlhttp://m.shnenglu.com/jjbird/services/trackbacks/2993.htmlselect ID,name,zi,hao into outfile "zuozhe.txt" fields optionally enclosed by '""' terminated by ','

from gushizuozhe

load data infile "zuozhe.txt" into table gushizuozhe fields optionally enclosed by '\"' terminated by

',' (ID,name,zi,hao);

grant select on *.* to "public@192.168.%" identified by 'public';

revoke select on *.* from "public@192.168.%"
revoke 騫朵笉鑳藉垹闄ょ敤鎴鳳紝delete from mysql.user where user like "public%"

flush flush_option[,flush_option]

kill thread_id   unix/linux涓嬭繘琛?BR>show processlist
select user()

set password for www@localhost=password("www")

set option_setting

鍐欓攣銆佽閿?BR>lock tables gushi write,gushizuozhe write;
unlock tables


MYSQL緙栫▼鎺ュ彛
MYSQL C API
1銆佹暟鎹被鍨?BR>1)my_ulonglong
2)my_bool
3)MYSQL_FIELD_OFFSET
4)MYSQL
5)MYSQL_RES
6)MYSQL_ROW
7)MYSQL_FIELD
{
char *name;
char *table;
char *def;
enum enum_field_types type;//鍒楃殑鏁版嵁綾誨瀷
unsigned int length;//鍒楀畾涔夌殑闀垮害
unsigned int max_length;//鏁版嵁瀹為檯鐨勬渶澶ч暱搴?BR>unsigned int flags;//鍒楃殑灞炴?BR>}
8)unsigned int decimals//灝忔暟浣嶆暟

2銆佸嚱鏁?BR>1)my_bool mysql_change_user(MYSQL *mysql,const char *user,const char *password,const char *db)
2)void mysql_close(MYSQL *mysql)
3)MYSQL *mysql_init(MYSQL *mysql)
4)int mysql_option(MYSQL *mysql,enum mysql_option,const char *arg)鎸囧畾鏇寸簿紜殑榪炴帴鍙傛暟閫夐」
5)int mysql_ping(MYSQL *mysql)//媯鏌ヨ繛鎺ユ槸鍚︽甯?BR>6)MYSQL *mysql_real_connect(MYSQL *mysql,const char *host,const char *user,const char *password,const

char *db,unsiged int port,const char *unix_socket,unsigned int client_flag)
7)int mysql_select_db(MYSQL *mysql,const char *db)//閫夋嫨鏁版嵁搴揹b涓哄綋鍓嶆暟鎹簱
8)int mysql_query(MYSQL *mysql,const char *query)
9)int mysql_real_query(MYSQL *mysql,const char *query,unsigned int length)
10)char *mysql_info(MYSQL *mysql)//榪斿洖鏈鍚庢墽琛岀殑涓嬈℃搷浣滅殑鏈夊叧淇℃伅銆?BR>11)MYSQL_RES *mysql_store_result(MYSQL *mysql)//璇誨彇涓涓煡璇㈢殑鍏ㄩ儴緇撴灉銆?BR>12)MYSQL_RES *mysql_use_result(MYSQL *mysql)//鍒濆鍖栦竴涓粨鏋滈泦錛屼絾鏄笉鎶婄粨鏋滆鍒板鎴風錛屼粛鐒朵繚鐣欏湪鏈嶅姟鍣?/P>

涓?BR>13)void mysql_free_result(MYSQL_RES *result)//閲婃斁緇撴灉闆嗕嬌鐢ㄧ殑鍐呭瓨銆?BR>14)my_ulonglong mysql_affected_rows(MYSQL *mysql)//榪斿洖鏈鍚庝竴涓猽pdate,delete,insert鎿嶄綔褰卞搷鐨勮褰曟暟銆?BR>15)my_ulonglong mysql_num_rows(MYSQL *mysql)//mysql_store_result()榪斿洖鐨勭粨鏋滈泦涓殑璁板綍鏁般?BR>16)MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result,MYSQL_ROW_OFFSET offset)
17)MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result)//褰撳墠鍏夋爣浣嶇疆
18)MYSQL_ROW_OFFSET mysql_data_seek(MYSQL_RES *result,unsigned long long offset)
19)MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)//緇撴灉闆嗕腑鐨勪笅涓鏉¤褰?BR>20)unsigned int mysql_fetch_lengths(MYSQL_RES *result)//緇撴灉闆嗕腑褰撳墠璁板綍鐨勯暱搴?BR>21)unsigned int mysql_num_fields(MYSQL_RES *result)//緇撴灉闆嗕腑鍒楃殑鏁扮洰
22)MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result,MYSQL_FIELD_OFFSET offset)
23)MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *result)//褰撳墠鍏夋爣浣嶇疆
24)MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)//緇撴灉闆嗕腑褰撳墠鍒椾俊鎭?BR>25)MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)//緇撴灉闆嗕腑鎵鏈夊垪淇℃伅
26)MYSQL_RES *mysql_list_dbs(MYSQL *mysql,const char *wild)//涓巜ild姝e垯琛ㄨ揪寮忓尮閰嶇殑鏁版嵁搴撲俊鎭?BR>27)MYSQL_RES *mysql_list_tables(MYSQL *mysql,const char *wild)//涓巜ild姝e垯琛ㄨ揪寮忓尮閰嶇殑琛ㄤ俊鎭?BR>28)MYSQL_RES *mysql_list_fields(MYSQL *mysql,const char * table,const char *wild)//涓庡綋鍓嶈〃錛屽尮閰峸ild姝?/P>

鍒欒〃杈懼紡鐨勬墍鏈夊垪鍚嶇殑緇撴灉闆?BR>29)MYSQL_RES *mysql_list_processes(MYSQL *mysql)
30)char *mysql_stat(MYSQL *mysql)//褰撳墠鏈嶅姟鍣ㄧ殑淇℃伅
31)char *mysql_get_server_info(MYSQL *mysql)
32)char *mysql_get_client_info(MYSQL *mysql)
33)char *mysql_get_host_info(MYSQL *mysql)
34)char *mysql_get_proto_info(MYSQL *mysql)
35)unsiged long mysql_thread_id(MYSQL *mysql)
36)int mysql_kill(MYSQL *mysql,unsiged long pid)
37)int mysql_shutdown(MYSQL *mysql)
38)void mysql_debug(char *debug)
39)int mysql_dump_debug_info(char *debug)
40)unsigned int mysql_errno(MYSQL *mysql)
41)char *mysql_error(MYSQL *mysql)



濂囧 2006-01-23 17:36 鍙戣〃璇勮
]]>
鏀墮泦鐨勪竴浜涙妧宸?/title><link>http://m.shnenglu.com/jjbird/articles/2936.html</link><dc:creator>濂囧</dc:creator><author>濂囧</author><pubDate>Fri, 20 Jan 2006 09:01:00 GMT</pubDate><guid>http://m.shnenglu.com/jjbird/articles/2936.html</guid><wfw:comment>http://m.shnenglu.com/jjbird/comments/2936.html</wfw:comment><comments>http://m.shnenglu.com/jjbird/articles/2936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/jjbird/comments/commentRss/2936.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/jjbird/services/trackbacks/2936.html</trackback:ping><description><![CDATA[<P>ReverseFind鐢ㄦ硶<BR>// Example for CString::ReverseFind<BR>CString s( "abcabc" );<BR>ASSERT( s.ReverseFind( 'b' ) == 4 );</P> <P>寰楀埌宸ュ叿鏍忓昂瀵?BR>CSize sizeBar;<BR>CToolBar m_wndToolBar;<BR>m_wndToolBar.GetToolBarCtrl().GetMaxSize(&sizeBar);</P> <P>鍦ㄥ伐鍏鋒爮涓婃坊鍔犵紪杈戞 <BR>CRect rect;<BR>m_wndToolBar.SetButtonInfo(9,ID_SEPARATOR,TBBS_SEPARATOR,100);<BR>m_wndToolBar.GetItemRect(9,&rect);</P> <P>m_wndComboBox.Create(CBS_DROPDOWN|WS_VISIBLE|WS_VSCROLL|CBS_AUTOHSCROLL,rect, &m_wndToolBar,105);</P> <P>鏍煎紡鍖栦竴孌墊簮浠g爜<BR>Alt+F8</P> <P>瀹氫綅棰勫鐞?if錛?endif<BR>Ctrl+K</P> <P>欏跺眰紿楀彛鐨勫疄鐜?BR>鍦≒reCreateWindow()涓姞鍏?BR>cs.dwExStyle=WS_EX_TOPMOST</P><img src ="http://m.shnenglu.com/jjbird/aggbug/2936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/jjbird/" target="_blank">濂囧</a> 2006-01-20 17:01 <a href="http://m.shnenglu.com/jjbird/articles/2936.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://995688.com" target="_blank">亚洲欧洲综合</a>| <a href="http://seyuav4.com" target="_blank">一本色道久久</a>| <a href="http://hnspygxjscyfwzx.com" target="_blank">一本色道久久加勒比88综合</a>| <a href="http://www49966.com" target="_blank">欧美一区视频</a>| <a href="http://aqd072.com" target="_blank">99国产精品久久久久久久</a>| <a href="http://xiaofan123.com" target="_blank">国产精品成人免费</a>| <a href="http://epiegame.com" target="_blank">久久亚洲美女</a>| <a href="http://spardec.com" target="_blank">久久黄金**</a>| <a href="http://wwwavtb2049.com" target="_blank">欧美一区二区三区在线观看</a>| <a href="http://qmynong.com" target="_blank">国产视频精品免费播放</a>| <a href="http://obatshaka.com" target="_blank">老司机午夜精品视频在线观看</a>| <a href="http://henhenai1.com" target="_blank">亚洲一区二区精品在线</a>| <a href="http://pmref.com" target="_blank">精品999成人</a>| <a href="http://cqjk120.com" target="_blank">在线日韩av片</a>| <a href="http://798200.com" target="_blank">亚洲精品护士</a>| <a href="http://hnjlhgw.com" target="_blank">欧美日韩不卡</a>| <a href="http://yxtczx.com" target="_blank">欧美视频一区二区</a>| <a href="http://ztsctgs.com" target="_blank">国产女优一区</a>| <a href="http://080177.com" target="_blank">99亚洲一区二区</a>| <a href="http://69jp.com" target="_blank">久久伊伊香蕉</a>| <a href="http://miandoctor.com" target="_blank">久久尤物视频</a>| <a href="http://9511331.com" target="_blank">亚洲一区二区三区欧美</a>| <a href="http://lymzdd.com" target="_blank">一二三区精品</a>| <a href="http://zw1019.com" target="_blank">欧美一级理论片</a>| <a href="http://xxxx48.com" target="_blank">亚洲日本精品国产第一区</a>| <a href="http://hakuihoso.com" target="_blank">亚洲制服欧美中文字幕中文字幕</a>| <a href="http://www134rr.com" target="_blank">国产精品视频99</a>| <a href="http://qiansemf.com" target="_blank">欧美在线免费看</a>| <a href="http://haole081.com" target="_blank">国产精品三上</a>| <a href="http://by21999.com" target="_blank">亚洲一级黄色片</a>| <a href="http://by3259.com" target="_blank">亚洲福利电影</a>| <a href="http://wltaste.com" target="_blank">午夜视频一区二区</a>| <a href="http://www369cf.com" target="_blank">国产精品久久7</a>| <a href="http://0370city.com" target="_blank">亚洲私人影院</a>| <a href="http://798814.com" target="_blank">一本大道久久a久久综合婷婷</a>| <a href="http://345521.com" target="_blank">欧美wwwwww</a>| <a href="http://qscxx3.com" target="_blank">欧美亚洲一区二区在线</a>| <a href="http://yh5557.com" target="_blank">欧美国产视频在线</a>| <a href="http://4915w.com" target="_blank">久久久午夜视频</a>| <a href="http://kaijiepharm.com" target="_blank">在线看成人片</a>| <a href="http://4466777.com" target="_blank">另类av一区二区</a>| <a href="http://488089.com" target="_blank">久久天天狠狠</a>| <a href="http://7776701.com" target="_blank">国产精品最新自拍</a>| <a href="http://ztqsfw.com" target="_blank">亚洲私人黄色宅男</a>| <a href="http://spidermanseo.com" target="_blank">亚洲天堂免费观看</a>| <a href="http://360cabin.com" target="_blank">国产午夜亚洲精品羞羞网站</a>| <a href="http://www92444.com" target="_blank">另类尿喷潮videofree</a>| <a href="http://666cmc.com" target="_blank">欧美一级电影久久</a>| <a href="http://ww245434.com" target="_blank">在线日韩视频</a>| <a href="http://wu52vip.com" target="_blank">亚洲人成艺术</a>| <a href="http://www-42189.com" target="_blank">国产伦精品一区二区</a>| <a href="http://www-87633.com" target="_blank">欧美三级午夜理伦三级中视频</a>| <a href="http://www99mmnn.com" target="_blank">久久精品国产99国产精品澳门</a>| <a href="http://392294.com" target="_blank">性欧美1819sex性高清</a>| <a href="http://99cheats.com" target="_blank">欧美中在线观看</a>| <a href="http://138268.com" target="_blank">亚洲精品1234</a>| <a href="http://376524.com" target="_blank">午夜久久久久久</a>| <a href="http://xinghejiuye.com" target="_blank">红桃视频国产一区</a>| <a href="http://kdy444.com" target="_blank">久久国产精品亚洲va麻豆</a>| <a href="http://by71222.com" target="_blank">久久亚洲精品一区</a>| <a href="http://yw1396.com" target="_blank">久久精品国产视频</a>| <a href="http://1000078.com" target="_blank">av成人激情</a>| <a href="http://270909.com" target="_blank">免费欧美网站</a>| <a href="http://133686.com" target="_blank">久久精品视频在线免费观看</a>| <a href="http://my736.com" target="_blank">亚洲精品在线三区</a>| <a href="http://13789a.com" target="_blank">欧美大学生性色视频</a>| <a href="http://360695.com" target="_blank">一区二区日韩伦理片</a>| <a href="http://122332.com" target="_blank">亚洲午夜羞羞片</a>| <a href="http://tcgo903.com" target="_blank">日韩系列在线</a>| <a href="http://911mmm.com" target="_blank">蜜桃av一区</a>| <a href="http://shght.com" target="_blank">欧美韩国在线</a>| <a href="http://gzpurefaith.com" target="_blank">亚洲精品视频在线观看免费</a>| <a href="http://yngtxny.com" target="_blank">午夜精品久久久</a>| <a href="http://goutoujunshi.com" target="_blank">一区二区三区鲁丝不卡</a>| <a href="http://707377c.com" target="_blank">亚洲自拍另类</a>| <a href="http://wwwsfsf11.com" target="_blank">欧美欧美午夜aⅴ在线观看</a>| <a href="http://avtt0.com" target="_blank">国产真实乱偷精品视频免</a>| <a href="http://456985.com" target="_blank">亚洲尤物影院</a>| <a href="http://tuiliqi.com" target="_blank">欧美插天视频在线播放</a>| <a href="http://lfxhfh.com" target="_blank">亚洲第一网站免费视频</a>| <a href="http://3848404.com" target="_blank">亚洲已满18点击进入久久</a>| <a href="http://www-662553.com" target="_blank">麻豆精品在线视频</a>| <a href="http://55kam.com" target="_blank">国精品一区二区</a>| <a href="http://5s5s5s.com" target="_blank">亚洲国产精品免费</a>| <a href="http://wwwhaodd116.com" target="_blank">牛牛国产精品</a>| <a href="http://621939.com" target="_blank">亚洲欧美中文日韩在线</a>| <a href="http://by27333.com" target="_blank">免费观看成人网</a>| <a href="http://teqmeta.com" target="_blank">激情自拍一区</a>| <a href="http://iamsleekcn.com" target="_blank">久久久精彩视频</a>| <a href="http://www31931.com" target="_blank">久久亚洲精品欧美</a>| <a href="http://xilxx.com" target="_blank">亚洲欧美制服中文字幕</a>| <a href="http://rainbowbpm.com" target="_blank">国产精品v日韩精品</a>| <a href="http://422608.com" target="_blank">91久久精品日日躁夜夜躁欧美 </a>| <a href="http://shllswkj.com" target="_blank">久久国产精品久久久</a>| <a href="http://5gn4y.com" target="_blank">欧美久久99</a>| <a href="http://123lifenet.com" target="_blank">av成人免费在线观看</a>| <a href="http://713b.com" target="_blank">国产免费成人av</a>| <a href="http://bandycup.com" target="_blank">欧美成人精品不卡视频在线观看</a>| <a href="http://royaljinma.com" target="_blank">日韩视频三区</a>| <a href="http://jsydjxgs.com" target="_blank">国产精品乱码一区二三区小蝌蚪</a>| <a href="http://283575.com" target="_blank">亚洲在线中文字幕</a>| <a href="http://kongtou8.com" target="_blank">国产精品你懂的在线欣赏</a>| <a href="http://www-440450.com" target="_blank">小黄鸭精品aⅴ导航网站入口</a>| <a href="http://wltaste.com" target="_blank">欧美精品手机在线</a>| <a href="http://ca88tv.com" target="_blank">日韩一级视频免费观看在线</a>| <a href="http://tonglijinshu.com" target="_blank">一本在线高清不卡dvd</a>| <a href="http://y65o.com" target="_blank">好吊日精品视频</a>| <a href="http://www44552.com" target="_blank">欧美激情一区二区三区在线</a>| <a href="http://saobi6.com" target="_blank">亚洲一区二区成人在线观看</a>| <a href="http://zj-jufeng.com" target="_blank">亚洲女人天堂av</a>| <a href="http://szth186.com" target="_blank">亚洲小视频在线观看</a>| <a href="http://xiehaihua.com" target="_blank">一区二区三区久久网</a>| <a href="http://jav69me.com" target="_blank">午夜亚洲精品</a>| <a href="http://czsanlin.com" target="_blank">一级日韩一区在线观看</a>| <a href="http://www-35777.com" target="_blank">亚洲一区二区在</a>| <a href="http://ganmabook.com" target="_blank">欧美成ee人免费视频</a>| <a href="http://baluka-tw.com" target="_blank">欧美在线观看你懂的</a>| <a href="http://www44448.com" target="_blank">欧美精品一区三区</a>| <a href="http://www033459.com" target="_blank">久久免费视频在线观看</a>| <a href="http://599107.com" target="_blank">亚洲综合精品自拍</a>| <a href="http://wwww999.com" target="_blank">亚洲免费小视频</a>| <a href="http://rxbbei.com" target="_blank">怡红院av一区二区三区</a>| <a href="http://chunshanketang.com" target="_blank">亚洲一区二区在线视频 </a>| <a href="http://caopormo.com" target="_blank">欧美区二区三区</a>| <a href="http://www224558.com" target="_blank">久久精品国产96久久久香蕉</a>| <a href="http://xsjgxx.com" target="_blank">久久国产精品网站</a>| <a href="http://dahuxu.com" target="_blank">蜜臀久久久99精品久久久久久</a>| <a href="http://fsxinruiph.com" target="_blank">国产日韩欧美二区</a>| <a href="http://nxhjzddata.com" target="_blank">欧美亚洲第一区</a>| <a href="http://xiphosoft.com" target="_blank">韩国自拍一区</a>| <a href="http://yyy922.com" target="_blank">亚洲视频在线二区</a>| <a href="http://56myf.com" target="_blank">麻豆av福利av久久av</a>| <a href="http://608u.com" target="_blank">亚洲另类在线视频</a>| <a href="http://448968.com" target="_blank">中日韩男男gay无套</a>| <a href="http://677679.com" target="_blank">一区二区三区免费看</a>| <a href="http://lcqrsj.com" target="_blank">亚洲欧洲精品天堂一级</a>| <a href="http://278263.com" target="_blank">亚洲精品久久久久久一区二区</a>| <a href="http://zzzz80.com" target="_blank">欧美电影在线观看完整版</a>| <a href="http://hgx123.com" target="_blank">91久久精品一区二区三区</a>| <a href="http://yunyang0991.com" target="_blank">亚洲一区国产视频</a>| <a href="http://517hc5.com" target="_blank">最新国产成人av网站网址麻豆</a>| <a href="http://dailymailnepal.com" target="_blank">91久久精品一区二区三区</a>| <a href="http://www90aaa.com" target="_blank">久久亚洲私人国产精品va</a>| <a href="http://xingba999.com" target="_blank">亚洲黄色免费</a>| <a href="http://dfrllaser.com" target="_blank">欧美日韩和欧美的一区二区</a>| <a href="http://551753.com" target="_blank">欧美午夜久久久</a>| <a href="http://899399com.com" target="_blank">午夜在线电影亚洲一区</a>| <a href="http://3314133.com" target="_blank">亚洲日本电影</a>| <a href="http://cswlts.com" target="_blank">亚洲东热激情</a>| <a href="http://arielteam.com" target="_blank">免费成人在线观看视频</a>| <a href="http://sapronlee.com" target="_blank">久久综合五月</a>| <a href="http://xpfuli.com" target="_blank">国产精品av久久久久久麻豆网</a>| <a href="http://zuan3344.com" target="_blank">美女网站在线免费欧美精品</a>| <a href="http://cancerrxa.com" target="_blank">激情久久一区</a>| <a href="http://by1473.com" target="_blank">免费观看在线综合色</a>| <a href="http://lampreydb.com" target="_blank">久久三级视频</a>| <a href="http://jobmrleehxx.com" target="_blank">午夜激情久久久</a>| <a href="http://fanwenok.com" target="_blank">亚洲国产美女精品久久久久∴</a>| <a href="http://t3gg.com" target="_blank">国产一区二区精品久久</a>| <a href="http://expolucy.com" target="_blank">欧美激情久久久久久</a>| <a href="http://yssnlp.com" target="_blank">欧美日韩国产区一</a>| <a href="http://muwendada.com" target="_blank">久久久久久有精品国产</a>| <a href="http://www37999.com" target="_blank">亚洲精品自在久久</a>| <a href="http://ww323.com" target="_blank">国产女主播一区二区三区</a>| <a href="http://521531.com" target="_blank">亚洲精品欧美日韩</a>| <a href="http://www-06654.com" target="_blank">亚洲午夜久久久</a>| <a href="http://5767j.com" target="_blank">99精品热视频只有精品10</a>| <a href="http://126900.com" target="_blank">久久九九免费</a>| <a href="http://bckxy.com" target="_blank">免费中文字幕日韩欧美</a>| <a href="http://zucai168.com" target="_blank">欧美成年人网</a>| <a href="http://www18818.com" target="_blank">亚洲视频一起</a>| <a href="http://qiaoka526.com" target="_blank">欧美日韩视频在线一区二区观看视频 </a>| <a href="http://www-9694.com" target="_blank">久久字幕精品一区</a>| <a href="http://4438x28.com" target="_blank">欧美性猛片xxxx免费看久爱 </a>| <a href="http://yymh1056.com" target="_blank">91久久在线</a>| <a href="http://6767673.com" target="_blank">一区二区动漫</a>| <a href="http://4446666.com" target="_blank">久久久国产一区二区三区</a>| <a href="http://l5076.com" target="_blank">久久久91精品国产</a>| <a href="http://zzmzit.com" target="_blank">免费在线看成人av</a>| <a href="http://sepapapa8888.com" target="_blank">亚洲精品免费在线播放</a>| <a href="http://mascorcg.com" target="_blank">欧美激情成人在线</a>| <a href="http://vvv3939.com" target="_blank">亚洲电影在线看</a>| <a href="http://zytxkj.com" target="_blank">久久青草久久</a>| <a href="http://www99mmnn.com" target="_blank">亚洲欧洲日产国产网站</a>| <a href="http://710191.com" target="_blank">久久字幕精品一区</a>| <a href="http://nc04.com" target="_blank">欧美激情自拍</a>| <a href="http://shalxee.com" target="_blank">一区二区不卡在线视频 午夜欧美不卡在</a>| <a href="http://www47777.com" target="_blank">欧美综合第一页</a>| <a href="http://492541.com" target="_blank">国产日韩欧美麻豆</a>| <a href="http://848585.com" target="_blank">亚洲网站在线</a>| <a href="http://www17727.com" target="_blank">看片网站欧美日韩</a>| <a href="http://49028b.com" target="_blank">日韩性生活视频</a>| <a href="http://799868.com" target="_blank">国产精品毛片va一区二区三区 </a>| <a href="http://6h8c.com" target="_blank">久久一区二区三区国产精品</a>| <a href="http://wwwmiya118.com" target="_blank">欧美视频一区二区</a>| <a href="http://888nei.com" target="_blank">欧美在线观看一区二区</a>| <a href="http://zhxjl.com" target="_blank">日韩视频精品在线</a>| <a href="http://wwwyinyinai149.com" target="_blank">国产精品久久中文</a>| <a href="http://jiuzuifusheng.com" target="_blank">久久午夜精品一区二区</a>| <a href="http://220fuke.com" target="_blank">亚洲国产婷婷香蕉久久久久久99</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>