锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品va在线播放,国产亚洲美女精品久久久2020,亚洲另类春色校园小说http://www2.blogjava.net/ioriqw/category/10524.html鍦ㄤ腑鍥藉晢鐣屻佸挨鍏舵槸浜掕仈緗戠晫錛屽彟涓緹も?0鍚庘濋潚騫存鍦ㄩ泦浣撴誕鍑烘按闈紝浠ヤ綘鍙兘鎯抽兘鎯充笉鍒扮殑鏂瑰紡宕涜搗銆?/description>zh-cnTue, 27 Feb 2007 19:32:14 GMTTue, 27 Feb 2007 19:32:14 GMT60Change Internet Proxy settingshttp://www.tkk7.com/ioriqw/articles/96026.html宕涜搗鐨勭▼搴忓憳宕涜搗鐨勭▼搴忓憳Thu, 25 Jan 2007 12:06:00 GMThttp://www.tkk7.com/ioriqw/articles/96026.htmlhttp://www.tkk7.com/ioriqw/comments/96026.htmlhttp://www.tkk7.com/ioriqw/articles/96026.html#Feedback0http://www.tkk7.com/ioriqw/comments/commentRss/96026.htmlhttp://www.tkk7.com/ioriqw/services/trackbacks/96026.html鎽橀?/h2>

http://www.codeproject.com/internet/changeproxy1.asp

Introduction

Changing proxy settings of IE is a frequent requirement of mine. Then I got the idea of writing a tool by myself, at last. I have not found clear instructions on this. Many articles recommend to modify registry directly, but unfortunately their instruction is not enough. Most of them direct me to modify the following values in registry :-

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyEnable"=dword:00000001
"ProxyServer"=":"
"ProxyOverride"=""
"DisablePasswordCaching"=dword:00000001

Details

I tested it and find that it does not work at least on my computer.( I access internet by ADSL connection.) So I backed up registry and modified proxy settings via Internet Explorer, finding that [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections] is also changed. So I wrote the following code snippet to change proxy settings:

Collapse
				void ShowError(long lerr)
{
    LPVOID lpMsgBuf;
    if (!FormatMessage( 
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM | 
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        lerr,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
        (LPTSTR) &lpMsgBuf,
        0,
        NULL ))
    {
        return;
    }
    MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
    LocalFree( lpMsgBuf );
}
void CieproxyDlg::OnBnClickedOk()
{//set proxy server
    UpdateData();
    GetDlgItemText(IDC_EDIT1,m_sIEProxy);
    HKEY hk;
    LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
        "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
        NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
    if(lret==ERROR_SUCCESS&&NULL!=hk)
    {
        TCHAR* pbuf=m_sIEProxy.GetBuffer(1);
        lret=RegSetValueEx( hk,"ProxyServer",NULL,REG_SZ,pbuf,m_sIEProxy.GetLength());
        DWORD dwenable=1;
        lret=RegSetValueEx(hk,"ProxyEnable",NULL,REG_DWORD,
           (LPBYTE)&dwenable,sizeof(dwenable));
        RegCloseKey(hk);
    }
    const TCHAR* keyname3=_T(
      "software\\Microsoft\\windows\\currentversion\\Internet Settings\\Connections");
    lret=RegOpenKeyEx(HKEY_CURRENT_USER,keyname3,NULL,
        KEY_READ|KEY_WRITE|KEY_SET_VALUE,&hk);
    if(lret==ERROR_SUCCESS&&NULL!=hk)
    {
        DWORD dwtype;
        char pbuf[256];
        DWORD dwlen=sizeof(pbuf);
        constchar* valname="Connection to adsl3";
        lret=RegQueryValueEx(hk,valname,NULL,&dwtype,pbuf,&dwlen);
        if(lret!=ERROR_SUCCESS)
        {
            ShowError(lret);
        }
        pbuf[8] = 3;//enable proxy
        pbuf[4]=pbuf[4]+1;
        constchar* p=m_sIEProxy.GetBuffer(1);
        memcpy(pbuf+16,p,m_sIEProxy.GetLength());
        char c=0;
        for(int i=m_sIEProxy.GetLength();i<20;i++)
            pbuf[16+i]=c;
        m_sIEProxy.ReleaseBuffer();
        lret=RegSetValueEx(hk,valname,NULL,REG_BINARY,pbuf,dwlen);
        RegCloseKey(hk);
    }
    DWORD dwret;
    SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL,
        SMTO_NORMAL,1000,&dwret);
}

void CieproxyDlg::OnBnClickedDisableProxy()
{
    UpdateData();
    GetDlgItemText(IDC_EDIT1,m_sIEProxy);
    HKEY hk;
    LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,
        "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",
        NULL,KEY_WRITE|KEY_SET_VALUE,&hk);
    if(lret==ERROR_SUCCESS&&NULL!=hk)
    {
        DWORD dwenable=0;
        lret=RegSetValueEx(hk,"ProxyEnable",NULL,REG_DWORD,
            (LPBYTE)&dwenable,sizeof(dwenable));
        RegCloseKey(hk);
    }
    const TCHAR* keyname3=_T(
      "software\\Microsoft\\windows\\currentversion\\Internet Settings\\Connections");
    lret=RegOpenKeyEx(HKEY_CURRENT_USER,keyname3,
        NULL,KEY_READ|KEY_WRITE|KEY_SET_VALUE,&hk);
    if(lret==ERROR_SUCCESS&&NULL!=hk)
    {
        DWORD dwtype;
        char pbuf[256];
        DWORD dwlen=sizeof(pbuf);
        constchar* valname="Connection to adsl3";
        lret=RegQueryValueEx(hk,valname,NULL,&dwtype,pbuf,&dwlen);
        if(lret!=ERROR_SUCCESS)
        {
            ShowError(lret);
        }
        pbuf[8] = 1;//enable proxy
        pbuf[4]=pbuf[4]+1;
        lret=RegSetValueEx(hk,valname,NULL,REG_BINARY,pbuf,dwlen);
        RegCloseKey(hk);
    }
    DWORD dwret;
    SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,NULL,NULL,SMTO_NORMAL,
        1000,&dwret);
}

Problem with above code is that existing Internet Explorer instances don't know the change of settings. What is more, changing registry directly is not an elegant method. Then the following must be more attractive :

Collapse
BOOL SetConnectionOptions(LPCTSTR conn_name,LPCTSTR proxy_full_addr)
{
    //conn_name: active connection name. //proxy_full_addr : eg "210.78.22.87:8000"
    INTERNET_PER_CONN_OPTION_LIST list;
    BOOL    bReturn;
    DWORD   dwBufSize = sizeof(list);
    // Fill out list struct.
    list.dwSize = sizeof(list);
    // NULL == LAN, otherwise connectoid name.
    list.pszConnection = conn_name;
    // Set three options.
    list.dwOptionCount = 3;
    list.pOptions = new INTERNET_PER_CONN_OPTION[3];
    // Make sure the memory was allocated.if(NULL == list.pOptions)
    {
        // Return FALSE if the memory wasn't allocated.
        OutputDebugString("failed to allocat memory in SetConnectionOptions()");
        return FALSE;
    }
    // Set flags.
    list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
    list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT |
        PROXY_TYPE_PROXY;

    // Set proxy name.
    list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
    list.pOptions[1].Value.pszValue = proxy_full_addr;//"http://proxy:80";// Set proxy override.
    list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
    list.pOptions[2].Value.pszValue = "local";

    // Set the options on the connection.
    bReturn = InternetSetOption(NULL,
        INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);

    // Free the allocated memory.delete [] list.pOptions;
    InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
    InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
    return bReturn;
}
BOOL DisableConnectionProxy(LPCTSTR conn_name)
{
    //conn_name: active connection name. 
    INTERNET_PER_CONN_OPTION_LIST list;
    BOOL    bReturn;
    DWORD   dwBufSize = sizeof(list);
    // Fill out list struct.
    list.dwSize = sizeof(list);
    // NULL == LAN, otherwise connectoid name.
    list.pszConnection = conn_name;
    // Set three options.
    list.dwOptionCount = 1;
    list.pOptions = new INTERNET_PER_CONN_OPTION[list.dwOptionCount];
    // Make sure the memory was allocated.if(NULL == list.pOptions)
    {
        // Return FALSE if the memory wasn't allocated.
        OutputDebugString("failed to allocat memory in DisableConnectionProxy()");
        return FALSE;
    }
    // Set flags.
    list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
    list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT  ;
    // Set the options on the connection.
    bReturn = InternetSetOption(NULL,
        INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);
    // Free the allocated memory.delete [] list.pOptions;
    InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
    InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
    return bReturn;
}

The usage is very straightforward:

				//set proxy
				const
				char* connection_name="Connection to adsl3";
    SetConnectionOptions(connection_name,"62.81.236.23:80");
//disable proxy 
    DisableConnectionProxy(connection_name);
    

Existing Internet Explorer instances are notified by INTERNET_OPTION_SETTINGS_CHANGED and INTERNET_OPTION_REFRESH



]]>
Visual Assist X 鐮磋Вhttp://www.tkk7.com/ioriqw/articles/85724.html宕涜搗鐨勭▼搴忓憳宕涜搗鐨勭▼搴忓憳Tue, 05 Dec 2006 16:29:00 GMThttp://www.tkk7.com/ioriqw/articles/85724.htmlhttp://www.tkk7.com/ioriqw/comments/85724.htmlhttp://www.tkk7.com/ioriqw/articles/85724.html#Feedback0http://www.tkk7.com/ioriqw/comments/commentRss/85724.htmlhttp://www.tkk7.com/ioriqw/services/trackbacks/85724.html聽(tīng)鍙戜俊浜? xjwai (Shong), 淇″尯: NewSoftware
鏍嚶?棰? Visual Assist X 鐮磋В鎶ュ憡
鍙戜俊绔? 姘存湪紺懼尯 (Wed Sep 20 21:05:46 2006), 绔欏唴

聽(tīng)聽(tīng)聽(tīng) 濂戒箙娌$敤VA浜? 浠婂ぉ鏈変漢鍙戜簡(jiǎn)鏂扮増鏈?535, 灝辮瘯浜?jiǎn)璇? 鍏堟兂鐢ㄤ互鍓嶇増鏈殑code緇撴灉娌℃湁
鎴愬姛. VA璇曠敤鏈熶竴涓湀, 璇曠敤鏄叏鍔熻兘鐨? 榪欑偣榪樹笉閿? 浣嗘槸鍒版湡鐨勮瘽灝變笉鑳界戶緇簡(jiǎn).榪欑瘒
鐭枃鐨勭洰鐨勫氨鏄棤闄愭湡鎵╁睍璇曠敤鏈? 浣夸綘鑳藉灝芥儏浜彈VA甯︽潵鐨勫揩涔?聽(tīng) 鍏嶅幓澶у瀵繪壘鐮磋В
鐨勭棝鑻?

聽(tīng)聽(tīng)聽(tīng) 鏈潵涓嶆兂鍙戠殑, Visual Assist X紜疄鍋氬緱涓嶉敊.濡傛灉瑙夊緱VA濂界敤, 璇鋒敮鎸佹鐗? 鍛靛懙.

聽(tīng)聽(tīng)聽(tīng) 鐢ㄥ埌鐨勫伐鍏? Registry Workshop, 闄勪歡涓湁涓浠?

聽(tīng)聽(tīng)聽(tīng) 浠ヤ笅鐨勫唴瀹瑰弬鑰冧簡(jiǎn)涓浜涚綉涓婄殑鏂囩珷, 鍙﹀鏈変竴浜涚寽嫻嬬殑鎴愬垎, 璇瘋嚜鎷呴闄?

聽(tīng)聽(tīng)聽(tīng) 涓昏鐨勬柟娉曞氨鏄秷鍘籚A璁板綍涓嬬殑涓浜涘畨瑁呭強(qiáng)璇曠敤鏃墮棿淇℃伅.VA璁板綍榪欎簺淇℃伅鐨勫湴鏂規(guī)湁涓?br />涓?

1) HKEY_LOCAL_MACHINE\SOFTWARE\Licenses

聽(tīng)聽(tīng)聽(tīng) 榪欎竴涓緢濂芥壘. 寤鴻鍔犲叆Registry Workshop鏀惰棌澶?

2)
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ACABBB00-02A4-CF3E-B293-188330493F10}

聽(tīng)聽(tīng)聽(tīng) {XXX...}瀵逛簬涓嶅悓鐨勭増鏈互鍙?qiáng)涓嶅悓鐨勬満鍣ㄥ彲鑳戒笉鍚? 姣斿
{ACABBB00-02A4-CF3E-B293-188330493F10}鏄垜XP铏氭嫙鏈轟笂鐨勫? 鎴戝疄闄呮満鍣ㄤ笂鐨勬槸
{2401839D-8A0E-F7A3-3A39-201EB8E3078D}.

聽(tīng)聽(tīng)聽(tīng) 瑕佹壘鍒拌繖涓鏉? 灝辮鐢ㄥ埌Registry Workshop, 嫻忚鑷?br />HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\, 鐒跺悗鎵鏈夋潯鐩寜鏃墮棿鍊掑簭鎺掑簭, 涓?br />Visual Assist瀹夎鏃墮棿宸笉澶氱殑閭e嚑涓?3~10涓惂, 璺熷叿浣撴満鍣ㄦ湁鍏? 榪樻湁鍏朵粬鐨勮蔣浠跺惂)
閫愪竴媯(gè)鏌? 鏈変竴涓殑瀛愰」涓嶈鍒? 鑰屽叾浠栫殑閮芥瘮杈冭鍒? 濡?/p>

{ACABBB00-02A4-CF3E-B293-188330493F10}
聽(tīng)聽(tīng)聽(tīng) fMNvzvRluw
聽(tīng)聽(tīng)聽(tīng) paowhf
聽(tīng)聽(tīng)聽(tīng) Jvielmgrzqpm
聽(tīng)聽(tīng)聽(tīng) durvuNbfybvH
聽(tīng)聽(tīng)聽(tīng) Psohy
聽(tīng)聽(tīng)聽(tīng) wqGi
聽(tīng)聽(tīng)聽(tīng) zydrzwfqWyFs
聽(tīng)聽(tīng)聽(tīng) InProcServer32

鑰屽叾浠栫殑涓鑸槸
{XXXXXXXX...}
聽(tīng)聽(tīng)聽(tīng) Description
聽(tīng)聽(tīng)聽(tīng) InprocServer32
聽(tīng)聽(tīng)聽(tīng) ProgID
聽(tīng)聽(tīng)聽(tīng) VersionIndependentProgID

絳夌瓑, 瀹為檯涓婄洰鏍囬」{ACABBB00-02A4-CF3E-B293-188330493F10}鏄疺A鐨勬椂闂翠俊鎭褰? 褰撶劧
鍙湁VA鐨勪漢鐭ラ亾瀹冪殑鏍煎紡浜? 涓烘帺浜鴻崇洰, {ACABBB00-02A4-CF3E-B293-188330493F10} 鍙?br />鍚堝茍鍙﹀鐨勪竴涓殢鏈虹殑宸叉敞鍐岀殑CLSID, 鍥犳褰撲綘鐪嬪埌
{ACABBB00-02A4-CF3E-B293-188330493F10} 涓嬬殑 InprocServer32 濂藉儚鏄彟澶栫殑鏌愪釜鎰熻
寰堥噸瑕佺殑涓滆タ, 鎴戞兂, 濡傛灉浣犲湪 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\ 涓嬫悳绱㈢殑
璇? 搴旇鎼滃緱鍒板畠鐪熸鐨勬潯鐩?

聽(tīng)聽(tīng)聽(tīng) 鎵懼埌
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ACABBB00-02A4-CF3E-B293-188330493F10
}鎴栬呬綘鏈哄櫒涓婄殑鐩稿簲欏瑰悗, 寤鴻鍔犲叆鏀惰棌澶?

聽(tīng)聽(tīng)聽(tīng) 3) 浣犵殑temp鐢ㄦ埛鍙橀噺%USERPROFILE%\Local Settings\Temp 涓殑涓存椂鏂囦歡
1489AFE4.TMP.
濡傛灉浣犵殑Temp鐢ㄦ埛鍙橀噺璁劇疆鍒頒簡(jiǎn)鍏朵粬鐨勫湴鏂?姣斿, 鎴戠殑鍦‵:\Temp\UTemp), 璇峰埌鐩稿簲鐨勪綅
緗壘鍒拌繖涓枃浠? 榪欎釜鏂囦歡鐨勪慨鏀規(guī)椂闂村拰鍒涘緩鏃墮棿閮戒笌VA瀹夎鏃墮棿鐩稿樊涓嶅. 鐩鎬俊涓嶉毦鎵懼埌
. 鍏蜂綋鐨勬枃浠跺悕鍙兘鍜岀増鏈浉鍏?
褰撶劧涔熷彲浠ユ妸姝ょ洰褰曞叏閮ㄦ竻絀? 涓鑸儏鍐典笅搴旇娌℃湁浠涔堥棶棰?

聽(tīng)聽(tīng)聽(tīng) 浠ヤ笂涓夊璁板綍鐨勪俊鎭簲璇ユ槸涓鏍風(fēng)殑, 鐮磋В鏃剁暀涓嬩換浣曚竴澶勯兘涓嶈兘鎴愬姛. 鍗歌澆VA鏃? 榪欎笁
澶勭殑淇℃伅閮戒繚鐣欑潃, 鍗歌澆VA鐒跺悗閲嶈鐨勫姙娉曟槸琛屼笉閫氱殑. 灝辯畻閲嶈緋葷粺, 濡傛灉浣犳妸temp鐢ㄦ埛
鍙橀噺鐩綍璁懼埌浠ュ墠鐨勪綅緗笖娌℃湁娓呯悊榪? 鍒欐敞鍐岃〃鏄叏鏂扮殑浼拌涔熸棤嫻庝簬浜?

聽(tīng)聽(tīng)聽(tīng) 涓嬮潰緇欎竴涓畝鍗曠殑鎵瑰鐞嗙殑渚嬪瓙, 鍙兘闇瑕佹牴鎹嚜宸辯殑鎯呭喌鍜岀増鏈慨鏀瑰叾涓殑涓浜涙暟鎹?/p>

聽(tīng)聽(tīng)聽(tīng) VAClean榪愯鏃惰鍏抽棴Visual Studio

####################### VAClean.cmd 寮濮?#######################

@echo off

rem 姝や袱欏硅鑷濉啓涓哄悎閫傜殑鍊?br />set cid={2401839D-8A0E-F7A3-3A39-201EB8E3078D}
set tpf="F:\Temp\UTemp\1489AFE4.TMP"

reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Licenses /f
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\%cid% /f
del /q %tpf%

echo.
pause

####################### VAClean.cmd 緇撴潫 #######################

浠ヤ笂嫻嬭瘯鍩轟簬
Visual Assist X 10.3.1535.0
Visual Assist X 10.3.1534.0 (姝ゆ柟娉曚互鍓嶇殑鐗堟湰浠ュ強(qiáng)浠ュ悗鐨勮嫢騫蹭釜鐗堟湰鍙兘鏈夋晥)
浠ュ強(qiáng)
Visual C++ 6
Visual Studio 2005
浠ュ強(qiáng)
XP SP2

涓嬭澆:
http://www.wholetomato.com/downloads/VA_X_Setup1301.exe
http://www.wholetomato.com/downloads/VA_X_Setup1534.exe
http://www.wholetomato.com/downloads/VA_X_Setup1535.exe

--

鈥?鏉ユ簮:路姘存湪紺懼尯 http://newsmth.net路[FROM: 166.111.86.*]

闄勪歡: Registry_Workshop.rar (388 KB) 閾炬帴:
http://www.newsmth.net/att.php?p.99.950977.3575.rar
鍏ㄦ枃閾炬帴錛?a >http://www.newsmth.net/bbscon.php?bid=99&id=950977



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1258267



]]>
鍦–B涓敤socket api鏉ュ啓緗戠粶閫氳紼嬪簭http://www.tkk7.com/ioriqw/articles/44081.html宕涜搗鐨勭▼搴忓憳宕涜搗鐨勭▼搴忓憳Sat, 29 Apr 2006 12:52:00 GMThttp://www.tkk7.com/ioriqw/articles/44081.htmlhttp://www.tkk7.com/ioriqw/comments/44081.htmlhttp://www.tkk7.com/ioriqw/articles/44081.html#Feedback0http://www.tkk7.com/ioriqw/comments/commentRss/44081.htmlhttp://www.tkk7.com/ioriqw/services/trackbacks/44081.html鏈枃杞嚜csdn錛屼綔鑰咃細(xì)kingcaiyao
鍘熸爣棰橈細(xì)鍦–++ Builder涓敤socket api鏉ュ啓緗戠粶閫氳紼嬪簭錛堝悓鏃舵敮鎸乀CP鍜孶DP鍗忚錛?br />鍘熸枃:聽(tīng)聽(tīng)http://www.csdn.net/develop/read_article.asp?id=19883


鍦?鏈?鏃ョ湅瀹宻ockcomp.pas鍚庯紝鎴戝喅瀹氱敤socket api鏉ュ啓涓涓鎴風(fēng)鍜屾湇鍔″櫒騫朵笖鍚屾椂鏀寔TCP,UDP鍗忚錛屼簬鏄垜灝卞幓鍋氾紝鐜板皢浠g爜璐村嚭鏉ワ紙宸茶皟璇曢氳繃錛?br />Socket api Client:

#ifndef UDPClientH
#define UDPClientH
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <stdio.h>
#include "CCEdit.h"
#define WM_SOCK WM_USER+100
class TLANForm : public TForm
{
__published: // IDE-managed Components
聽(tīng)聽(tīng)聽(tīng)TEdit *Port;
聽(tīng)聽(tīng)聽(tīng)TLabel *Label1;
聽(tīng)聽(tīng)聽(tīng)TLabel *Label2;
聽(tīng)聽(tīng)聽(tīng)TComboBox *Prot;
聽(tīng)聽(tīng)聽(tīng)TButton *Button1;
聽(tīng)聽(tīng)聽(tīng)TLabel *Label3;
聽(tīng)聽(tīng)聽(tīng)TEdit *Addr;
聽(tīng)聽(tīng)聽(tīng)TCCEdit *TxtEdit;
聽(tīng)聽(tīng)聽(tīng)void __fastcall FormCreate(TObject *Sender);
聽(tīng)聽(tīng)聽(tīng)void __fastcall Button1Click(TObject *Sender);
聽(tīng)聽(tīng)聽(tīng)void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
聽(tīng)聽(tīng)聽(tīng)void __fastcall OnRecv(TMessage &Message);
public:聽(tīng)聽(tīng)// User declarations
聽(tīng)聽(tīng)聽(tīng)__fastcall TLANForm(TComponent* Owner);
聽(tīng)聽(tīng)聽(tīng)BEGIN_MESSAGE_MAP
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)VCL_MESSAGE_HANDLER(WM_SOCK,TMessage,OnRecv);
聽(tīng)聽(tīng)聽(tīng)END_MESSAGE_MAP(TForm);
};
extern PACKAGE TLANForm *LANForm;
#endif


.cpp File

#include <vcl.h>
#pragma hdrstop
#include "UDPClient.h"
#include "WinSock.h"
#pragma package(smart_init)
#pragma link "CCEdit"
#pragma resource "*.dfm"
TLANForm *LANForm;
enum PROTO {TCP=0,UDP=1};
SOCKET m_Socket=INVALID_SOCKET;
PROTO m_Protocol=TCP;
__fastcall TLANForm::TLANForm(TComponent* Owner)
聽(tīng)聽(tīng)聽(tīng): TForm(Owner)
{

}
void __fastcall TLANForm::FormCreate(TObject *Sender)
{
聽(tīng)聽(tīng)聽(tīng)::SendMessage(Prot->Handle,CB_SETCURSEL,0,0);
}
void __fastcall TLANForm::OnRecv(TMessage &Message)
{
聽(tīng)聽(tīng)聽(tīng)char buf[4096];
聽(tīng)聽(tīng)聽(tīng)int nLen;
聽(tīng)聽(tīng)聽(tīng)struct sockaddr_in from;
聽(tīng)聽(tīng)聽(tīng)int nLength=sizeof(struct sockaddr_in);
聽(tīng)聽(tīng)聽(tīng)switch(WSAGETSELECTEVENT(Message.LParam))
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case FD_READ:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)switch(m_Protocol)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case TCP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)nLen=recv(m_Socket,buf,4096,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(nLen>0){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)buf[nLen]='\0';
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)TxtEdit->Text="Received Length:"+String(nLen)+"\r\n"+StrPas(buf);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case UDP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)nLen=recvfrom(m_Socket,buf,4096,0,(struct sockaddr*)&from,&nLength);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(nLen>0){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)buf[nLen]='\0';
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)TxtEdit->Text="Received Length:"+String(nLen)+"\r\n"+StrPas(buf);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case FD_CLOSE:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)}
}

void __fastcall TLANForm::Button1Click(TObject *Sender)
{
聽(tīng)聽(tīng)聽(tīng)char szTmp[256],buf[4096];
聽(tīng)聽(tīng)聽(tīng)int nSize=0;
聽(tīng)聽(tīng)聽(tīng)UINT m_Port;
聽(tīng)聽(tīng)聽(tīng)AnsiString addr;
聽(tīng)聽(tīng)聽(tīng)addr=Addr->Text.Trim();
聽(tīng)聽(tīng)聽(tīng)if(addr.IsEmpty()){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,"Please enter the server IP!","Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)unsigned long nAddr=inet_addr(addr.c_str());
聽(tīng)聽(tīng)聽(tīng)if(nAddr==INADDR_NONE){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,"Bad Internet IP!","Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;}

聽(tīng)聽(tīng)聽(tīng)try
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Port=Port->Text.ToInt();
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)catch(Exception &e)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,e.Message.c_str(),"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)switch(Prot->ItemIndex)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case 0:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Protocol=TCP;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case 1:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Protocol=UDP;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)if(TxtEdit->Text.IsEmpty()){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,"Please enter the text you want to send!","Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;}

聽(tīng)聽(tīng)聽(tīng)//Initialize Winsocket
聽(tīng)聽(tīng)聽(tīng)WSAData wsaData;
聽(tīng)聽(tīng)聽(tīng)::ZeroMemory(&wsaData,sizeof(WSAData));
聽(tīng)聽(tīng)聽(tīng)WORD version=MAKEWORD(2,0);
聽(tīng)聽(tīng)聽(tīng)if(::WSAStartup(version,&wsaData)){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to initial winsock enviroment!,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;}

聽(tīng)聽(tīng)聽(tīng)//Obtain the active connection
聽(tīng)聽(tīng)聽(tīng)char ComputerName[255];
聽(tīng)聽(tīng)聽(tīng)gethostname(ComputerName,255);
聽(tīng)聽(tīng)聽(tīng)struct hostent* he=gethostbyname(ComputerName);
聽(tīng)聽(tīng)聽(tīng)if(!he){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to get information to host!","Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)//create new socket
聽(tīng)聽(tīng)聽(tīng)m_Socket=INVALID_SOCKET;
聽(tīng)聽(tīng)聽(tīng)switch(m_Protocol)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case TCP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Socket=socket(AF_INET,SOCK_STREAM,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case UDP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Socket=socket(AF_INET,SOCK_DGRAM,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)if(m_Socket==INVALID_SOCKET){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to create a new socket!,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)//bind socket
聽(tīng)聽(tīng)聽(tīng)struct sockaddr_in client;
聽(tīng)聽(tīng)聽(tīng)unsigned long nClient;
聽(tīng)聽(tīng)聽(tīng)memcpy(&nClient,he->h_addr_list[0],sizeof(int));
聽(tīng)聽(tīng)聽(tīng)if(nClient==INADDR_NONE){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to obtain the local machine's IP!","Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)client.sin_family=AF_INET;
聽(tīng)聽(tīng)聽(tīng)client.sin_port=0;
聽(tīng)聽(tīng)聽(tīng)client.sin_addr.S_un.S_addr=(int)nClient;
聽(tīng)聽(tīng)聽(tīng)if(bind(m_Socket,(struct sockaddr*)&client,sizeof(struct sockaddr))){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to bind socket!","Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;}
聽(tīng)聽(tīng)聽(tīng)//connect socket
聽(tīng)聽(tīng)聽(tīng)struct sockaddr_in To;
聽(tīng)聽(tīng)聽(tīng)To.sin_family=AF_INET;
聽(tīng)聽(tīng)聽(tīng)To.sin_port=htons(m_Port);
聽(tīng)聽(tīng)聽(tīng)To.sin_addr.S_un.S_addr=(int)nAddr;
聽(tīng)聽(tīng)聽(tīng)fd_set FDSET;
聽(tīng)聽(tīng)聽(tīng)FD_ZERO(&FDSET);
聽(tīng)聽(tīng)聽(tīng)FD_SET(m_Socket,&FDSET);


聽(tīng)聽(tīng)聽(tīng)if(m_Protocol==TCP){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(connect(m_Socket,(struct sockaddr*)&To,sizeof(struct sockaddr))){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to connect the object!,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)int nError=select(1,0,&FDSET,0,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(nError<=0){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to select socket!,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;}
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)//Send data
聽(tīng)聽(tīng)聽(tīng)int nLen=TxtEdit->Text.Length();
聽(tīng)聽(tīng)聽(tīng)if(nLen>4096){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"The buffer is too size to send,it shoud not be more than 4096 bytes!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)strncpy(buf,TxtEdit->Text.c_str(),nLen);
聽(tīng)聽(tīng)聽(tīng)switch(m_Protocol)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case TCP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)nSize=send(m_Socket,buf,nLen,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//ShowMessage(nSize);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case UDP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)nSize=sendto(m_Socket,buf,nLen,0,(struct sockaddr*)&To,sizeof(struct sockaddr));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//ShowMessage(nSize);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;

聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)if(::WSAAsyncSelect(m_Socket,Handle,WM_SOCK,FD_READ|FD_CLOSE)){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to register socket event!,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;}
}
void __fastcall TLANForm::FormDestroy(TObject *Sender)
{
聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
}

Socket api Server:
.h File
#ifndef UDPServerH
#define UDPServerH
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <stdio.h>
#include "WinSock.h"
/*#define WM_SOCKET WM_USER+1000
#define INITSOCKETSUCCESS 0
#define INITSOCKETFAILURE 1
#define CREATELISTENSOCKETSUCCESS 2
#define CREATELISTENSOCKETFAILURE 3
#define SETLISTENSOCKETSUCCESS 4
#define SETLISTENSOCKETFAILURE 5
#define BINDLISTENSOCKETSUCCESS 6
#define BINDLISTENSOCKETFAILURE 7
#define LISTENSOCKETSUCCESS 8
#define LISTENSOCKETFAILURE 9
#define ACCEPTSOCKETSUCCESS 10
#define ACCEPTSOCKETFAILURE 11
*/
class TPSTNForm : public TForm
{
__published: // IDE-managed Components
聽(tīng)聽(tīng)聽(tīng)TEdit *Port;
聽(tīng)聽(tīng)聽(tīng)TLabel *Label1;
聽(tīng)聽(tīng)聽(tīng)TMemo *Memo1;
聽(tīng)聽(tīng)聽(tīng)TButton *Button1;
聽(tīng)聽(tīng)聽(tīng)TButton *Button2;
聽(tīng)聽(tīng)聽(tīng)TLabel *Label2;
聽(tīng)聽(tīng)聽(tīng)TComboBox *Prot;
聽(tīng)聽(tīng)聽(tīng)void __fastcall Button1Click(TObject *Sender);
聽(tīng)聽(tīng)聽(tīng)void __fastcall Button2Click(TObject *Sender);
聽(tīng)聽(tīng)聽(tīng)void __fastcall FormCreate(TObject *Sender);
聽(tīng)聽(tīng)聽(tīng)void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
public:聽(tīng)聽(tīng)// User declarations
聽(tīng)聽(tīng)聽(tīng)__fastcall TPSTNForm(TComponent* Owner);
};
enum PROTO {TCP,UDP};
class TCommunication:public TThread聽(tīng)聽(tīng)聽(tīng)聽(tīng)//Communication Thread
{
private:
聽(tīng)聽(tīng)聽(tīng)SOCKET m_AcceptSocket;
聽(tīng)聽(tīng)聽(tīng)char szTmp[256];//ERROR MESSAGE
public:
聽(tīng)聽(tīng)聽(tīng)__fastcall TCommunication(SOCKET m_Socket,bool CreateSuspended);
聽(tīng)聽(tīng)聽(tīng)__fastcall ~TCommunication();
protected:
聽(tīng)聽(tīng)聽(tīng)virtual void __fastcall Execute();
};
class TListenThread:public TThread //Listen Thread
{
private:
聽(tīng)聽(tīng)聽(tīng)WSAData wsaData;
聽(tīng)聽(tīng)聽(tīng)struct sockaddr_in server;
聽(tīng)聽(tīng)聽(tīng)fd_set FDS;
聽(tīng)聽(tīng)聽(tīng)UINT m_Port;
聽(tīng)聽(tīng)聽(tīng)PROTO m_Protocol;
聽(tīng)聽(tīng)聽(tīng)char szTmp[256];//Error Message
public:
聽(tīng)聽(tīng)聽(tīng)SOCKET m_Socket;
聽(tīng)聽(tīng)聽(tīng)void __fastcall DoError();
聽(tīng)聽(tīng)聽(tīng)void __fastcall InitSocket();
聽(tīng)聽(tīng)聽(tīng)void __fastcall CreateListenSocket();
聽(tīng)聽(tīng)聽(tīng)void __fastcall SetListenSocket();
聽(tīng)聽(tīng)聽(tīng)void __fastcall BindListenSocket();
聽(tīng)聽(tīng)聽(tīng)void __fastcall ListenSocket();

public:
聽(tīng)聽(tīng)聽(tīng)__fastcall TListenThread(PROTO m_ProtocolA,UINT m_PortA,bool CreateSuspended);
聽(tīng)聽(tīng)聽(tīng)virtual __fastcall ~TListenThread();
protected:
聽(tīng)聽(tīng)聽(tīng)virtual void __fastcall Execute();
};
extern PACKAGE TPSTNForm *PSTNForm;
#endif
.cpp File
#include <vcl.h>
#pragma hdrstop
#include "UDPServer.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TPSTNForm *PSTNForm;
TListenThread *pThread=0;
//******************************CLASS TCommunication For TCP****************************************************
__fastcall TCommunication::TCommunication(SOCKET m_Socket,bool CreateSuspended):TThread(FALSE)
{
聽(tīng)聽(tīng)聽(tīng)m_AcceptSocket=m_Socket;
聽(tīng)聽(tīng)聽(tīng)szTmp[0]='\0';
聽(tīng)聽(tīng)聽(tīng)FreeOnTerminate=true;
}
__fastcall TCommunication::~TCommunication()
{
聽(tīng)聽(tīng)// closesocket(m_AcceptSocket);
}
void __fastcall TCommunication::Execute()
{
聽(tīng)聽(tīng)聽(tīng)char buf[4096];
聽(tīng)聽(tīng)聽(tīng)int nSize=0;
聽(tīng)聽(tīng)聽(tīng)nSize=recv(m_AcceptSocket,(char FAR*)buf,4096,0);
聽(tīng)聽(tīng)聽(tīng)if(nSize>0)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)buf[nSize]='\0';
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//Display
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)PSTNForm->Memo1->Lines->Add("Received Length:"+String(nSize));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)PSTNForm->Memo1->Lines->Add("Received:"+StrPas(buf));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)//Deliver
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::Sleep(100);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)send(m_AcceptSocket,buf,nSize,0);
聽(tīng)聽(tīng)聽(tīng)}

}
//******************************CLASS TListenThread*****************************************************
__fastcall TListenThread::TListenThread(PROTO m_ProtocolA,UINT m_PortA,bool CreateSuspended):TThread(FALSE)
{
聽(tīng)聽(tīng)聽(tīng)m_Socket=INVALID_SOCKET;
聽(tīng)聽(tīng)聽(tīng)m_Port=m_PortA;
聽(tīng)聽(tīng)聽(tīng)m_Protocol=m_ProtocolA;
聽(tīng)聽(tīng)聽(tīng)szTmp[0]='\0';
聽(tīng)聽(tīng)聽(tīng)::ZeroMemory(&wsaData,sizeof(WSAData));
聽(tīng)聽(tīng)聽(tīng)::ZeroMemory(&server,sizeof(struct sockaddr_in));
聽(tīng)聽(tīng)聽(tīng)FreeOnTerminate=TRUE;//Automatically delete while terminating.
}
__fastcall TListenThread::~TListenThread()
{
聽(tīng)聽(tīng)聽(tīng)closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)::WSACleanup();
聽(tīng)聽(tīng)聽(tīng)m_Socket=INVALID_SOCKET;
聽(tīng)聽(tīng)聽(tīng)m_Port=0;
聽(tīng)聽(tīng)聽(tīng)m_Protocol=TCP;
聽(tīng)聽(tīng)聽(tīng)szTmp[0]='\0';
聽(tīng)聽(tīng)聽(tīng)::ZeroMemory(&wsaData,sizeof(WSAData));
聽(tīng)聽(tīng)聽(tīng)::ZeroMemory(&server,sizeof(struct sockaddr_in));
}
void __fastcall TListenThread::DoError()
{
聽(tīng)聽(tīng)聽(tīng)if(m_Socket!=INVALID_SOCKET) closesocket(m_Socket);
聽(tīng)聽(tīng)聽(tīng)WSACleanup();
聽(tīng)聽(tīng)聽(tīng)return;
}
void __fastcall TListenThread::InitSocket()
{
聽(tīng)聽(tīng)聽(tīng)WORD version=MAKEWORD(2,0);
聽(tīng)聽(tīng)聽(tīng)if(::WSAStartup(version,&wsaData)){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to intiailize socket,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)DoError();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
}
void __fastcall TListenThread::CreateListenSocket()
{
聽(tīng)聽(tīng)聽(tīng)switch(m_Protocol)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case UDP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Socket=socket(AF_INET,SOCK_DGRAM,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case TCP:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Socket=socket(AF_INET,SOCK_STREAM,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)default:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Error protocol!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)DoError();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)if(m_Socket==INVALID_SOCKET){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to create socket!");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)DoError();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
}
void __fastcall TListenThread::SetListenSocket()
{
聽(tīng)聽(tīng)聽(tīng)server.sin_family=AF_INET;
聽(tīng)聽(tīng)聽(tīng)server.sin_port=htons(m_Port);
聽(tīng)聽(tīng)聽(tīng)server.sin_addr.S_un.S_addr=INADDR_ANY;
聽(tīng)聽(tīng)聽(tīng)int NewOpenType=SO_SYNCHRONOUS_NONALERT;
聽(tīng)聽(tīng)聽(tīng)if(setsockopt(INVALID_SOCKET,SOL_SOCKET,SO_OPENTYPE,(char*)&NewOpenType,4)){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Set socket option error,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)DoError();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
}
void __fastcall TListenThread::BindListenSocket()
{
聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(bind(m_Socket,(sockaddr*)&server,sizeof(struct sockaddr_in))){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to bind socket,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)DoError();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}

}
void __fastcall TListenThread::ListenSocket()
{
聽(tīng)聽(tīng)if(listen(m_Socket,SOMAXCONN)){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"listen error,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)DoError();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)//Determine whether there is any connection
聽(tīng)聽(tīng)FD_ZERO(&FDS);
聽(tīng)聽(tīng)FD_SET(m_Socket,&FDS);
}
void __fastcall TListenThread::Execute()
{
聽(tīng)聽(tīng)聽(tīng)char buf[4096];
聽(tīng)聽(tīng)聽(tīng)struct sockaddr_in from; //for UDP
聽(tīng)聽(tīng)聽(tīng)int nLen=sizeof(from),nSize=0;聽(tīng)聽(tīng)//for UDP
聽(tīng)聽(tīng)聽(tīng)I(yíng)nitSocket();
聽(tīng)聽(tīng)聽(tīng)CreateListenSocket();
聽(tīng)聽(tīng)聽(tīng)SetListenSocket();
聽(tīng)聽(tīng)聽(tīng)BindListenSocket();
聽(tīng)聽(tīng)聽(tīng)if(m_Protocol==UDP){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)while(!Terminated){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)int nSize=recvfrom(m_Socket,buf,4096,0,(struct sockaddr*)&from,&nLen);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(nSize>0){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)buf[nSize]='\0';
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)PSTNForm->Memo1->Lines->Add("Received Length:"+String(nSize));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)PSTNForm->Memo1->Lines->Add("Received:"+StrPas(buf));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::Sleep(100);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sendto(m_Socket,buf,nSize,0,(struct sockaddr*)&from,sizeof(struct sockaddr_in));
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)else return;

聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)ListenSocket();
聽(tīng)聽(tīng)聽(tīng)struct sockaddr_in client;
聽(tīng)聽(tīng)聽(tīng)int nLength=sizeof(struct sockaddr_in);
聽(tīng)聽(tīng)聽(tīng)while(!Terminated){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)int nError=select(1,&FDS,0,0,0);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(nError<=0) Terminate();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)SOCKET m_AcceptSocket=accept(m_Socket,(struct sockaddr*)&client,&nLength);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(m_AcceptSocket==INVALID_SOCKET){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sprintf(szTmp,"Failed to execute accept,error no:%d",::WSAGetLastError());
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)DoError();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Terminate();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)TCommunication *pCThread=new TCommunication(m_AcceptSocket,FALSE);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)pCThread->Terminate();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)pCThread->WaitFor();
聽(tīng)聽(tīng)聽(tīng)}
}
//************************PSTNForm*********************************************//
__fastcall TPSTNForm::TPSTNForm(TComponent* Owner)
聽(tīng)聽(tīng)聽(tīng): TForm(Owner)
{
}
void __fastcall TPSTNForm::Button1Click(TObject *Sender)
{
聽(tīng)聽(tīng)聽(tīng)Close();
}
void __fastcall TPSTNForm::Button2Click(TObject *Sender)
{
聽(tīng)聽(tīng)聽(tīng)if(pThread){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)pThread->Suspend();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)pThread->Terminate();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)delete pThread;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)pThread=0;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)UINT m_Port;
聽(tīng)聽(tīng)聽(tīng)try
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Port=Port->Text.ToInt();
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)catch(Exception &e)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)::MessageBox(0,e.Message.c_str(),"Error",MB_OK+MB_ICONERROR);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)return;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)PROTO m_Protocol;
聽(tīng)聽(tīng)聽(tīng)switch(Prot->ItemIndex)
聽(tīng)聽(tīng)聽(tīng){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case 0:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Protocol=TCP;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)case 1:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)m_Protocol=UDP;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)default:
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;
聽(tīng)聽(tīng)聽(tīng)}
聽(tīng)聽(tīng)聽(tīng)pThread=new TListenThread(m_Protocol,m_Port,FALSE);
聽(tīng)聽(tīng)聽(tīng)//pThread->Terminate();
}
void __fastcall TPSTNForm::FormCreate(TObject *Sender)
{
聽(tīng)聽(tīng)聽(tīng)::SendMessage(Prot->Handle,CB_SETCURSEL,0,1);
}

void __fastcall TPSTNForm::FormDestroy(TObject *Sender)
{
聽(tīng)聽(tīng)聽(tīng)if(pThread){
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)pThread->Suspend();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)pThread->Terminate();}
}
涓婇潰鐨勪唬鐮侊紝鍚勪綅鍙牴鎹嚜宸茬殑闇瑕佸拰閽堝鑷凡鐨勫簲鐢紝鍦ㄦ暟鎹鐞嗘柟闈㈠姞浠ユ敼榪涘氨鍙互浜?/font>

]]>
鍏充簬鐩綍澶勭悊鐨勪竴浜涘嚱鏁?/title><link>http://www.tkk7.com/ioriqw/articles/44078.html</link><dc:creator>宕涜搗鐨勭▼搴忓憳</dc:creator><author>宕涜搗鐨勭▼搴忓憳</author><pubDate>Sat, 29 Apr 2006 12:46:00 GMT</pubDate><guid>http://www.tkk7.com/ioriqw/articles/44078.html</guid><wfw:comment>http://www.tkk7.com/ioriqw/comments/44078.html</wfw:comment><comments>http://www.tkk7.com/ioriqw/articles/44078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/ioriqw/comments/commentRss/44078.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/ioriqw/services/trackbacks/44078.html</trackback:ping><description><![CDATA[ <font face="Arial" color="#808080" size="2">鍦ㄧ紪紼嬫椂,緇忓父鏈変竴浜涢拡瀵圭洰褰曠殑鎿嶄綔,濡傛墦寮鐩綍瀵硅瘽妗嗛夋嫨涓涓洰褰?鐩存帴鍒涘緩澶氱駭鐩綍,鐩存帴鍒犻櫎澶氱駭鐩綍,鍒ゆ柇鏌愪釜鐩綍鏄惁瀛樺湪絳夈傛湰鏂囧氨榪欎簺闂緇欏嚭緙栫▼瀹炵幇鏂規(guī)硶錛屽茍緇欏嚭璇︾粏鐨勭▼搴忎唬鐮侊紝渚涘悇浣嶇紪紼嬬埍濂借呭弬鑰冦?br /><br />涓銆佸垽鏂洰褰曟槸鍚﹀瓨鍦細(xì)<br /><br />聽(tīng)聽(tīng)C++ Builder涓彁渚涗簡(jiǎn)媯(gè)鏌ユ枃浠舵槸鍚﹀瓨鍦ㄧ殑鍑芥暟FileExists錛屼絾娌℃湁鎻愪緵媯(gè)鏌ョ洰褰曟槸鍚﹀瓨鍦ㄧ殑鍑芥暟錛屾垜浠彲浠ョ敤Windows API鍑芥暟FindFirstFile瀹炵幇榪欎釜鍔熻兘銆傜▼搴忓疄鐜板涓嬶細(xì)<br /><br />璁綾har *Dir涓哄甫鍒ゆ柇鐨勭洰褰?br />bool Exist;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鏈鍚庣粨鏋滐紝琛ㄧず鐩綍鏄惁瀛樺湪<br />if(Dir[strlen(Dir)]=='\\')Dir[strlen(Dir)-1]='\0';聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍏堝垹闄ゆ渶鍚庣殑鈥淺鈥?br />WIN32_FIND_DATA wfd;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鏌ユ壘<br />HANDLE hFind=FindFirstFile(Dir,&wfd);聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)<br />if(hFind==INVALID_HANDLE_VALUE)Exist=false;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 娌℃湁鎵懼埌閰嶅錛岀洰褰曡偗瀹氫笉瀛樺湪<br />else<br />{<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 媯(gè)鏌ユ壘鍒扮殑緇撴灉鏄惁鐩綍<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Exist=true;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鏄洰褰?鐩綍瀛樺湪<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)else<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Exist=false;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鏄洰褰?鐩綍涓嶅瓨鍦?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)FindClose(hFind);<br />} <br /><br />浜屻佹墦寮鐩綍閫夋嫨瀵硅瘽妗嗛夋嫨涓涓洰褰曪細(xì)<br /><br />聽(tīng)聽(tīng)澶у涓撲笟杞歡鍦ㄨ姹傝緭鍏ョ洰褰曠殑緙栬緫妗嗘梺閮芥斁浜?jiǎn)涓涓寜閽紝鐐瑰嚮鍚庢墦寮涓涓洰褰曠獥鍙o紝寰堝緙栫▼鐖卞ソ鑰呬篃甯屾湜鑳芥帉鎻¤繖涓柟娉曘傚疄鐜拌繖涓姛鑳借璋冪敤Windows API鍑芥暟SHBrowseForFolder錛屽畬鏁村0鏄庝負(fù)WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi)錛岃繑鍥炰竴涓狪TEMIDLIST綾誨瀷鐨勬寚閽堬紝閫氳繃榪欎釜鎸囬拡璋冪敤鍑芥暟SHGetPathFromIDList鍙互紜畾鎵閫夋嫨鐨勭洰褰曠殑鍏ㄥ悕縐般傚叆鍙備負(fù)BROWSEINFO緇撴瀯鐨勬寚閽堬紝榪欎釜緇撴瀯杈冧負(fù)澶嶆潅錛屾垚鍛樺涓嬫墍紺猴細(xì)<br /><br />HWND hwndOwner;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鎷ユ湁瀵硅瘽妗嗙殑紿楀彛錛屽彲浠ヨ緗負(fù)Application->Handle <br />LPCITEMIDLIST pidlRoot; // ITEMIDLIST綾誨瀷鐨勬寚閽?琛ㄧず鍦ㄥ摢涓礬寰勪笅閫夋嫨錛屼竴鑸彲浠ヨ緗負(fù)NULL<br />LPSTR pszDisplayName;聽(tīng)聽(tīng)// 閫夋嫨鍚庯紝鎵閫夌洰褰曠殑鍚嶇О(涓嶅寘鍚埗綰х洰褰?琚嫹璐濆埌榪欎釜鎸囬拡鎸囧悜鐨勪綅緗?<br />LPCSTR lpszTitle;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 浣滀負(fù)鏍囬鏄劇ず鍦ㄥ璇濇涓洰褰曟爲(wèi)鐨勪笂闈紝鍙互鏍規(guī)嵁瀹為檯鎯呭喌璁劇疆 <br />UINT ulFlags;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鏍囧織浣嶏紝鏈夌偣澶嶆潅錛屼竴鑸緗負(fù)BIF_RETURNONLYFSDIRS <br />BFFCALLBACK lpfn;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍥炶皟鍑芥暟錛屼竴鑸笉鐢紝璁劇疆涓篘ULL <br />LPARAM lParam;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 棰勫畾涔夌殑瀵硅瘽妗嗕紶閫掔粰鍥炶皟鍑芥暟鐨勫?br />int iImage;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 涓庢墍閫夌洰褰曠浉鍏寵仈鐨勫浘鏍囧湪緋葷粺鍥炬爣闆嗗悎涓殑绱㈠紩 <br />鍙互鐪嬪嚭錛屼嬌鐢ㄥ嚱鏁癝HBrowseForFolder榪樼湡楹葷儲(chǔ)錛屾櫘閫氱埍濂借呮帉鎻″畠紜疄鏈変竴瀹氱殑闅懼害錛岀幇緇欏嚭瀹屾暣紼嬪簭孌靛涓嬶細(xì) <br />#include <shlobj.h>聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 蹇呴』鍖呭惈鐨勫ご鏂囦歡<br />char SelectedDir[MAX_PATH];聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鏈緇堢粨鏋?br />BROWSEINFO bi;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍏ュ弬<br />char FolderName[MAX_PATH];聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鎵閫夌洰褰曞悕縐幫紝渚嬪閫夋嫨C:\Windows\Font,鍒欎負(fù)Font <br />LPITEMIDLIST ItemID;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鎵閫夌洰褰曠殑緋葷粺鏍囧織鎸囬拡<br /><br />memset(SelectedDir, 0, MAX_PATH);聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍒濆鍖栨渶緇堢粨鏋?br />memset(&bi, 0, sizeof(BROWSEINFO));聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍒濆鍖栧叆鍙傛墍鏈夋暟鎹?br />bi.hwndOwner = Application->Handle;<br />bi.pszDisplayName = FolderName;<br />bi.lpszTitle = "璇烽夋嫨鐩綍";聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鏀規(guī)垚鑷繁甯屾湜鐨?br />bi.ulFlags=BIF_RETURNONLYFSDIRS;<br />ItemID = SHBrowseForFolder(&bi);聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 璋冪敤鍑芥暟錛屾墦寮鐩綍閫夋嫨瀵硅瘽妗?br />if(ItemID)<br />{<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)SHGetPathFromIDList(ItemID, SelectedDir);聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鑾峰彇鎵閫夌洰褰曠殑鍏ㄥ悕<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)GlobalFree(ItemID);聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 榪斿洖鐨処temID鍗犵敤浜?jiǎn)绯痪l熻祫婧愶紝涓嶈蹇樹簡(jiǎn)閲婃斁<br />} <br /><br />涓夈佺洿鎺ュ緩绔嬪綰х洰褰曪細(xì)<br /><br />聽(tīng)聽(tīng)Windows API鎻愪緵浜?jiǎn)寰忕珛鐩綍鐨勫嚱鏁癈reateDirectory錛屼絾鏄皟鐢ㄥ墠瑕佷繚璇佺埗鐩綍蹇呴』瀛樺湪錛屽惁鍒欎細(xì)澶辮觸銆傚叾瀹烇紝鏈夋椂瓚婄駭寤虹珛澶氱駭鐩綍寰堟湁鐢紝鍥犱負(fù)鍦ㄥ緩绔嬬洰褰曠壒鍒槸寤虹珛澶氬眰鐩綍鏃訛紝灞傚眰鍔犱互鍒ゆ柇浼?xì)澶уぇ鍦板鍔牻E嬪簭鐨勫鏉傜▼搴︺傚浣曞疄鐜拌繖涓姛鑳藉憿錛熸湰浜虹敤閫掑綊鏂規(guī)硶璁捐浜?jiǎn)涓涓彲浠ョ洿鎺ュ緩绔嬪綰х洰褰曠殑鍑芥暟錛岀幇璇存槑濡備笅錛屼緵鍚勪綅鏈嬪弸鍙傝冦?br /><br />bool MakeDirectoryEx(const AnsiString &P)聽(tīng)聽(tīng)// 鍏ュ弬涓烘墦綆楀垱寤虹殑鐩綍鍚?鏍規(guī)嵁鎿嶄綔緇撴灉榪斿洖"true"鎴?false"<br />{<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(P.IsEmpty())return false;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)int len=P.Length();<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)char *Path=P.c_str();<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(Path[len-1]=='\\')<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)len--;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Path[len]='\0';<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)}聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍒犻櫎鏈熬鐨?\"<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)AnsiString Dir=Path;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍒嗗紑鐖剁洰褰曞拰鏈韓鐩綍鍚嶇О<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)AnsiString Parent;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)for(int i=len-1;i>0;i--)<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(Dir.IsPathDelimiter(i))<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Parent=Dir.SubString(0,i);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)break;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(Parent.IsEmpty())return false; // 鐩綍鍚嶇О閿欒<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)bool Ret=true;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(Parent.Length()>3)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 濡傛灉闀垮害灝忎簬3錛岃〃紺轟負(fù)紓佺洏鏍圭洰褰?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Ret=DirectoryExistEx(Parent.c_str());// 媯(gè)鏌ョ埗鐩綍鏄惁瀛樺湪<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(!Ret)Ret=MakeDirectoryEx(Parent);聽(tīng)聽(tīng)// 鐖剁洰褰曚笉瀛樺湪,閫掑綊璋冪敤鍒涘緩鐖剁洰褰?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(Ret)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鐖剁洰褰曞瓨鍦?鐩存帴鍒涘緩鐩綍<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)SECURITY_ATTRIBUTES sa;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sa.nLength=sizeof(SECURITY_ATTRIBUTES);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sa.lpSecurityDescriptor=NULL;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)sa.bInheritHandle=0;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Ret=CreateDirectory(Path,&sa);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)return Ret;<br />} <br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)鍙互鐪嬪嚭鍩烘湰鏂規(guī)硶鏄?<br />鍏堟鏌ョ埗鐩綍鏄惁瀛樺湪錛岃繖閲岀敤鍒扮殑鍑芥暟DirectoryExistEx鍙互鎸夌収鍓嶉潰浠嬬粛鐨勬柟娉曡璁★紱 <br />濡傛灉鐖剁洰褰曞瓨鍦紝鍒欑洿鎺ュ垱寤虹洰褰?鍚﹀垯鑷垜璋冪敤鍒涘緩鐖剁洰褰曘?<br /><br /><br />鍥涖佺洿鎺ュ垹闄ゆ暣涓洰褰曪細(xì)<br /><br />聽(tīng)聽(tīng)鍦―OS涓嬫湁涓涓狣eltree鍛戒護(hù)錛岀敤鏉ュ垹闄ゆ暣涓洰褰曪紝榪欐槸涓涓緢鏈夌敤鐨勫姛鑳斤紝鍙儨錛學(xué)indows API鎻愪緵鐨勫嚱鏁癛emoveDirectory鍙兘鍒犻櫎鎺х洰褰曪紝灝卞儚DOS鐨凴D鍛戒護(hù)涓鏍楓傜紪紼嬪疄鐜拌繖涓姛鑳藉悓鏍烽渶瑕侀掑綊鏂規(guī)硶錛屽熀鏈祦紼嬫槸錛?<br /><br />鏌ユ壘鐩綍涓嬬殑鎵鏈夋枃浠跺拰鐩綍錛屽嵆璋冪敤API鍑芥暟FindFirstFile銆丗indNextFile(*.*) <br />濡傛灉鎵懼埌鏂囦歡錛屽垯寮哄埗鍒犻櫎銆傛墍璋撳己鍒跺垹闄わ紝鍗沖垹闄ゅ墠鍏堣皟鐢⊿etFileAttributes鎶婂畠鐨勫睘鎬ц緗負(fù)Normal錛岀劧鍚庤皟鐢―eleteFile鍒犻櫎瀹冦?<br />濡傛灉鎵懼埌鐩綍錛屽垯榪涜鑷垜璋冪敤錛屽嵆寮濮嬮掑綊榪囩▼銆?<br />濡傛灉娌℃湁鎵懼埌鐩綍錛屽嵆琛ㄧず涓烘帶鐩綍錛岃皟鐢≧emoveDirectory鐩存帴鍒犻櫎銆?<br />鍏蜂綋紼嬪簭浠g爜濡備笅錛?br /><br />bool DeleteDirectoryEx(const AnsiString &P)<br />{<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(P.IsEmpty() || P.Length()<4)return false;聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)// 鍙傛暟闀垮害蹇呴』澶т簬3錛屽嵆涓嶈兘涓虹鐩樻牴鐩綍鎴栫┖鐧?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)int len=P.Length();<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)char *Path=P.c_str();<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)AnsiString Dir=Path;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(Path[len-1]!='\\')Dir=Dir+'\\';<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)AnsiString Files=Dir+"*.*";<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)WIN32_FIND_DATA wfd;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)HANDLE hFind=FindFirstFile(Files.c_str(),&wfd);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)bool Ret=true;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)AnsiString Tmp;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(hFind!=INVALID_HANDLE_VALUE)<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)bool bFind=true;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)while(bFind)<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(wfd.cFileName[0]!='.') // . ..<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Tmp=Dir+wfd.cFileName;<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){ // 鍒犻櫎鎵鏈夊瓙鐩綍<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Ret=Ret&&DeleteDirectoryEx(Tmp.c_str(),false);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}else<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng){ // 鍒犻櫎鎵鏈夋枃浠?br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)SetFileAttributes(Tmp.c_str(),FILE_ATTRIBUTE_NORMAL);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)Ret=Ret&&DeleteFile(Tmp.c_str());<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)bFind=FindNextFile(hFind,&wfd);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)FindClose(hFind);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)}<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)if(Ret)return RemoveDirectory(Path);<br />聽(tīng)聽(tīng)聽(tīng)聽(tīng)return false;<br />}</font> <img src ="http://www.tkk7.com/ioriqw/aggbug/44078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/ioriqw/" target="_blank">宕涜搗鐨勭▼搴忓憳</a> 2006-04-29 20:46 <a href="http://www.tkk7.com/ioriqw/articles/44078.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>寰蔣ping紼嬪簭婧愪唬鐮佸畬鏁寸増http://www.tkk7.com/ioriqw/articles/43476.html宕涜搗鐨勭▼搴忓憳宕涜搗鐨勭▼搴忓憳Thu, 27 Apr 2006 01:44:00 GMThttp://www.tkk7.com/ioriqw/articles/43476.htmlhttp://www.tkk7.com/ioriqw/comments/43476.htmlhttp://www.tkk7.com/ioriqw/articles/43476.html#Feedback0http://www.tkk7.com/ioriqw/comments/commentRss/43476.htmlhttp://www.tkk7.com/ioriqw/services/trackbacks/43476.html 浣滆?渚織姹?/font>

緙栧啓鑷繁鐨勪竴涓猵ing紼嬪簭,鍙互璇存槸璁稿浜鴻繄鍑虹綉緇滅紪紼嬬殑絎竴姝ュ惂!!榪欎釜ping紼嬪簭鐨勬簮浠g爜緇忚繃鎴戠殑淇敼鍜岃皟璇?鍩烘湰涓婂彲浠ュ彇浠indows涓嚜甯︾殑ping紼嬪簭. 鍚勪釜妯″潡鍚庨兘鏈夋垜鐨勮緇嗘敞閲婂拰淇敼鏃ュ織,甯屾湜鑳藉瀵瑰ぇ瀹剁殑瀛︿範(fàn)鏈夋墍甯姪!!

/*聽(tīng) 鏈▼搴忕殑涓昏婧愪唬鐮佹潵鑷狹SDN緗戠珯, 絎旇呭彧鏄仛浜?jiǎn)涓浜涙敼榪涘拰娉ㄩ噴! 鍙﹀闇瑕佹敞鎰忕殑鏄湪Build涔嬪墠,蹇呴』鍔犲叆ws2_32.lib搴撴枃浠?鍚﹀垯浼?xì)鎻惤C?error LNK2001:"鐨勯敊璇紒*/

/******************************************************************************\
| Version 1.1 淇敼璁板綍:聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) |
|聽(tīng)聽(tīng)聽(tīng) <1> 瑙e喅浜?jiǎn)socket闃誨鐨勯棶棰?浠庤岃兘澶熸紜湴澶勭悊瓚呮椂鐨勮姹?聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) |
|----------------------------------------------------------------------------------------------------|
| Version 1.2 淇敼璁板綍:聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) |
|聽(tīng)聽(tīng)聽(tīng) <1> 澧炲姞浜?jiǎn)鐢辩敤鎴锋帶鍒跺彂閫両CMP鍖呯殑鏁扮洰鐨勫姛鑳?鍗沖懡浠ょ殑絎簩涓弬鏁?.聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) |聽(tīng)聽(tīng)聽(tīng)
|聽(tīng)聽(tīng)聽(tīng) <2> 澧炲姞浜?jiǎn)瀵筽ing緇撴灉鐨勭粺璁″姛鑳?聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) |
\******************************************************************************/

#pragma pack(4)

#include
#include
#include

#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0

#define ICMP_MIN 8 // minimum 8 byte icmp packet (just header)

/* The IP header */
typedef struct iphdr {
unsigned int h_len:4; // length of the header
unsigned int version:4; // Version of IP
unsigned char tos; // Type of service
unsigned short total_len; // total length of the packet
unsigned short ident; // unique identifier
unsigned short frag_and_flags; // flags
unsigned char ttl;
unsigned char proto; // protocol (TCP, UDP etc)
unsigned short checksum; // IP checksum

unsigned int sourceIP;
unsigned int destIP;

}IpHeader;

//
// ICMP header
//
typedef struct icmphdr {
BYTE i_type;
BYTE i_code; /* type sub code */
USHORT i_cksum;
USHORT i_id;
USHORT i_seq;
/* This is not the std header, but we reserve space for time */
ULONG timestamp;
}IcmpHeader;

#define STATUS_FAILED 0xFFFF
#define DEF_PACKET_SIZE聽(tīng)聽(tīng)聽(tīng) 32
#define DEF_PACKET_NUMBER聽(tīng) 4聽(tīng)聽(tīng)聽(tīng) /* 鍙戦佹暟鎹姤鐨勪釜鏁?*/
#define MAX_PACKET 1024

#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s))
#define xfree(p) HeapFree (GetProcessHeap(),0,(p))

void fill_icmp_data(char *, int);
USHORT checksum(USHORT *, int);
int decode_resp(char *,int ,struct sockaddr_in *);

void Usage(char *progname){

fprintf(stderr,"Usage:\n");
fprintf(stderr,"%s [number of packets] [data_size]\n",progname);
fprintf(stderr,"datasize can be up to 1Kb\n");
ExitProcess(STATUS_FAILED);

}
int main(int argc, char **argv){

WSADATA wsaData;
SOCKET sockRaw;
struct sockaddr_in dest,from;
struct hostent * hp;
int bread,datasize,times;
int fromlen = sizeof(from);
int timeout = 1000;
int statistic = 0;聽(tīng) /* 鐢ㄤ簬緇熻緇撴灉 */聽(tīng)
char *dest_ip;
char *icmp_data;
char *recvbuf;
unsigned int addr=0;
USHORT seq_no = 0;

if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0){
fprintf(stderr,"WSAStartup failed: %d\n",GetLastError());
ExitProcess(STATUS_FAILED);
}

if (argc <2 ) {
Usage(argv[0]);
}
sockRaw = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL, 0,WSA_FLAG_OVERLAPPED);

//
//娉細(xì)涓轟簡(jiǎn)浣跨敤鍙戦佹帴鏀惰秴鏃惰緗?鍗寵緗甋O_RCVTIMEO, SO_SNDTIMEO)錛?
//聽(tīng)聽(tīng)聽(tīng) 蹇呴』灝嗘爣蹇椾綅璁句負(fù)WSA_FLAG_OVERLAPPED !
//

if (sockRaw == INVALID_SOCKET) {
fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
bread = setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set recv timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
timeout = 1000;
bread = setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,
sizeof(timeout));
if(bread == SOCKET_ERROR) {
fprintf(stderr,"failed to set send timeout: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
memset(&dest,0,sizeof(dest));

hp = gethostbyname(argv[1]);

if (!hp){
addr = inet_addr(argv[1]);
}
if ((!hp) && (addr == INADDR_NONE) ) {
fprintf(stderr,"Unable to resolve %s\n",argv[1]);
ExitProcess(STATUS_FAILED);
}

if (hp != NULL)
memcpy(&(dest.sin_addr),hp->h_addr,hp->h_length);
else
dest.sin_addr.s_addr = addr;

if (hp)
dest.sin_family = hp->h_addrtype;
else
dest.sin_family = AF_INET;

dest_ip = inet_ntoa(dest.sin_addr);

//
//聽(tīng) atoi鍑芥暟鍘熷瀷鏄? int atoi( const char *string );
//聽(tīng) The return value is 0 if the input cannot be converted to an integer !
//
if(argc>2)
{
聽(tīng)times=atoi(argv[2]);
聽(tīng)if(times == 0)
聽(tīng) times=DEF_PACKET_NUMBER;
}
else
聽(tīng)聽(tīng)聽(tīng) times=DEF_PACKET_NUMBER;

if (argc >3)
{
聽(tīng)datasize = atoi(argv[3]);
聽(tīng)聽(tīng)聽(tīng) if (datasize == 0)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) datasize = DEF_PACKET_SIZE;
聽(tīng)if (datasize >1024)聽(tīng)聽(tīng) /* 鐢ㄦ埛緇欏嚭鐨勬暟鎹寘澶у皬澶ぇ */
聽(tīng){
聽(tīng) fprintf(stderr,"WARNING : data_size is too large !\n");
聽(tīng) datasize = DEF_PACKET_SIZE;
聽(tīng)}
}
else
聽(tīng)聽(tīng)聽(tīng) datasize = DEF_PACKET_SIZE;

datasize += sizeof(IcmpHeader);

icmp_data = (char*)xmalloc(MAX_PACKET);
recvbuf = (char*)xmalloc(MAX_PACKET);

if (!icmp_data) {
fprintf(stderr,"HeapAlloc failed %d\n",GetLastError());
ExitProcess(STATUS_FAILED);
}


memset(icmp_data,0,MAX_PACKET);
fill_icmp_data(icmp_data,datasize);

//
//鏄劇ず鎻愮ず淇℃伅
//
fprintf(stdout,"\nPinging %s ....\n\n",dest_ip);


for(int i=0;i{
int bwrote;

((IcmpHeader*)icmp_data)->i_cksum = 0;
((IcmpHeader*)icmp_data)->timestamp = GetTickCount();

((IcmpHeader*)icmp_data)->i_seq = seq_no++;
((IcmpHeader*)icmp_data)->i_cksum = checksum((USHORT*)icmp_data,datasize);

bwrote = sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,sizeof(dest));
if (bwrote == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("Request timed out.\n");
continue;
}
fprintf(stderr,"sendto failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
if (bwrote < datasize ) {
fprintf(stdout,"Wrote %d bytes\n",bwrote);
}
bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,&fromlen);
if (bread == SOCKET_ERROR){
if (WSAGetLastError() == WSAETIMEDOUT) {
printf("Request timed out.\n");
continue;
}
fprintf(stderr,"recvfrom failed: %d\n",WSAGetLastError());
ExitProcess(STATUS_FAILED);
}
if(!decode_resp(recvbuf,bread,&from))
聽(tīng)statistic++; /* 鎴愬姛鎺ユ敹鐨勬暟鐩?+ */
Sleep(1000);

}
聽(tīng)
/*
Display the statistic result
*/
fprintf(stdout,"\nPing statistics for %s \n",dest_ip);
fprintf(stdout,"聽(tīng)聽(tīng)聽(tīng) Packets: Sent = %d,Received = %d, Lost = %d (%2.0f%% loss)\n",times,
聽(tīng)聽(tīng)聽(tīng)聽(tīng) statistic,(times-statistic),(float)(times-statistic)/times*100);


WSACleanup();
return 0;

}
/*
The response is an IP packet. We must decode the IP header to locate
the ICMP data
*/
int decode_resp(char *buf, int bytes,struct sockaddr_in *from) {

IpHeader *iphdr;
IcmpHeader *icmphdr;
unsigned short iphdrlen;

iphdr = (IpHeader *)buf;

iphdrlen = (iphdr->h_len) * 4 ; // number of 32-bit words *4 = bytes

if (bytes < iphdrlen + ICMP_MIN) {
printf("Too few bytes from %s\n",inet_ntoa(from->sin_addr));
}

icmphdr = (IcmpHeader*)(buf + iphdrlen);

if (icmphdr->i_type != ICMP_ECHOREPLY) {
fprintf(stderr,"non-echo type %d recvd\n",icmphdr->i_type);
return 1;
}
if (icmphdr->i_id != (USHORT)GetCurrentProcessId()) {
fprintf(stderr,"someone else's packet!\n");
return 1;
}
printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr));
printf(" icmp_seq = %d. ",icmphdr->i_seq);
printf(" time: %d ms ",GetTickCount()-icmphdr->timestamp);
printf("\n");
return 0;

}


USHORT 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);
}
/*
Helper function to fill in various stuff in our ICMP request.
*/
void fill_icmp_data(char * icmp_data, int datasize){

IcmpHeader *icmp_hdr;
char *datapart;

icmp_hdr = (IcmpHeader*)icmp_data;

icmp_hdr->i_type = ICMP_ECHO;
icmp_hdr->i_code = 0;
icmp_hdr->i_id = (USHORT)GetCurrentProcessId();
icmp_hdr->i_cksum = 0;
icmp_hdr->i_seq = 0;

datapart = icmp_data + sizeof(IcmpHeader);
//
// Place some junk in the buffer.
//
memset(datapart,'E', datasize - sizeof(IcmpHeader));

}

/******************* 闄? ping鍛戒護(hù)鎵ц鏃舵樉紺虹殑鐢婚潰 ***************\
*聽(tīng) C:\Documents and Settings\houzhijiang>ping 236.56.54.12聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Pinging 236.56.54.12 with 32 bytes of data:聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Request timed out.聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Request timed out.聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Request timed out.聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Request timed out.聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Ping statistics for 236.56.54.12:聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng) Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
\*********************************************************/

/*********************************************************\
*聽(tīng) C:\Documents and Settings\houzhijiang>ping 127.0.0.1聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Pinging 127.0.0.1 with 32 bytes of data:聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Reply from 127.0.0.1: bytes=32 time<1ms TTL=128聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Reply from 127.0.0.1: bytes=32 time<1ms TTL=128聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Reply from 127.0.0.1: bytes=32 time<1ms TTL=128聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Reply from 127.0.0.1: bytes=32 time<1ms TTL=128聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Ping statistics for 127.0.0.1:聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng) Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng) Approximate round trip times in milli-seconds:聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng) Minimum = 0ms, Maximum = 0ms, Average = 0ms聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
*聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) *
\********************************************************/



]]>
主站蜘蛛池模板: 中文字幕亚洲综合小综合在线| 四虎影视大全免费入口| 黄色网址在线免费| 全黄大全大色全免费大片| 中文在线观看免费网站| 久久国产乱子伦精品免费午夜 | 亚洲码一区二区三区| 亚洲国产成人久久综合一 | 日本免费人成视频播放| 国产精品免费视频网站| yy6080亚洲一级理论| 亚洲性在线看高清h片| 亚洲精品蜜桃久久久久久| 亚洲欧洲日产国码无码久久99| 久久夜色精品国产亚洲| 亚洲av成人无码久久精品| 亚洲国产高清美女在线观看| 亚洲视频无码高清在线| 亚洲另类无码专区首页| 97在线线免费观看视频在线观看| 91视频国产免费| 精品免费久久久久久成人影院| 国产免费人视频在线观看免费| 亚洲VA综合VA国产产VA中| 久久亚洲国产精品123区| 77777亚洲午夜久久多人| 亚洲成熟xxxxx电影| 亚洲av永久无码嘿嘿嘿| 麻豆亚洲AV成人无码久久精品 | 亚洲熟妇无码AV不卡在线播放 | 亚洲色欲色欲www| 亚洲AV成人无码网天堂| 日韩少妇内射免费播放| 免费精品久久天干天干| 一二三四在线播放免费观看中文版视频| 青青青国产免费一夜七次郎| 久久国产成人精品国产成人亚洲| 国产亚洲人成无码网在线观看| 亚洲国产成人久久三区| 深夜福利在线免费观看| 久久国产乱子伦精品免费看|