锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久亚洲国产成人影院,久久久无码精品亚洲日韩蜜桃,九九精品国产亚洲AV日韩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聽鍙戜俊浜? xjwai (Shong), 淇″尯: NewSoftware
鏍嚶?棰? Visual Assist X 鐮磋В鎶ュ憡
鍙戜俊绔? 姘存湪紺懼尯 (Wed Sep 20 21:05:46 2006), 绔欏唴

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

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

聽聽聽 鐢ㄥ埌鐨勫伐鍏? Registry Workshop, 闄勪歡涓湁涓浠?

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

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

1) HKEY_LOCAL_MACHINE\SOFTWARE\Licenses

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

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

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

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

{ACABBB00-02A4-CF3E-B293-188330493F10}
聽聽聽 fMNvzvRluw
聽聽聽 paowhf
聽聽聽 Jvielmgrzqpm
聽聽聽 durvuNbfybvH
聽聽聽 Psohy
聽聽聽 wqGi
聽聽聽 zydrzwfqWyFs
聽聽聽 InProcServer32

鑰屽叾浠栫殑涓鑸槸
{XXXXXXXX...}
聽聽聽 Description
聽聽聽 InprocServer32
聽聽聽 ProgID
聽聽聽 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\ 涓嬫悳绱㈢殑
璇? 搴旇鎼滃緱鍒板畠鐪熸鐨勬潯鐩?

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

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

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

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

聽聽聽 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 />鍘熸枃:聽聽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
聽聽聽TEdit *Port;
聽聽聽TLabel *Label1;
聽聽聽TLabel *Label2;
聽聽聽TComboBox *Prot;
聽聽聽TButton *Button1;
聽聽聽TLabel *Label3;
聽聽聽TEdit *Addr;
聽聽聽TCCEdit *TxtEdit;
聽聽聽void __fastcall FormCreate(TObject *Sender);
聽聽聽void __fastcall Button1Click(TObject *Sender);
聽聽聽void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
聽聽聽void __fastcall OnRecv(TMessage &Message);
public:聽聽// User declarations
聽聽聽__fastcall TLANForm(TComponent* Owner);
聽聽聽BEGIN_MESSAGE_MAP
聽聽聽聽聽聽VCL_MESSAGE_HANDLER(WM_SOCK,TMessage,OnRecv);
聽聽聽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)
聽聽聽: TForm(Owner)
{

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

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

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

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

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


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

聽聽聽}
聽聽聽if(::WSAAsyncSelect(m_Socket,Handle,WM_SOCK,FD_READ|FD_CLOSE)){
聽聽聽聽聽聽sprintf(szTmp,"Failed to register socket event!,error no:%d",::WSAGetLastError());
聽聽聽聽聽聽::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
聽聽聽聽聽聽closesocket(m_Socket);
聽聽聽聽聽聽::WSACleanup();
聽聽聽聽聽聽return;}
}
void __fastcall TLANForm::FormDestroy(TObject *Sender)
{
聽聽聽closesocket(m_Socket);
聽聽聽::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
聽聽聽TEdit *Port;
聽聽聽TLabel *Label1;
聽聽聽TMemo *Memo1;
聽聽聽TButton *Button1;
聽聽聽TButton *Button2;
聽聽聽TLabel *Label2;
聽聽聽TComboBox *Prot;
聽聽聽void __fastcall Button1Click(TObject *Sender);
聽聽聽void __fastcall Button2Click(TObject *Sender);
聽聽聽void __fastcall FormCreate(TObject *Sender);
聽聽聽void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
public:聽聽// User declarations
聽聽聽__fastcall TPSTNForm(TComponent* Owner);
};
enum PROTO {TCP,UDP};
class TCommunication:public TThread聽聽聽聽//Communication Thread
{
private:
聽聽聽SOCKET m_AcceptSocket;
聽聽聽char szTmp[256];//ERROR MESSAGE
public:
聽聽聽__fastcall TCommunication(SOCKET m_Socket,bool CreateSuspended);
聽聽聽__fastcall ~TCommunication();
protected:
聽聽聽virtual void __fastcall Execute();
};
class TListenThread:public TThread //Listen Thread
{
private:
聽聽聽WSAData wsaData;
聽聽聽struct sockaddr_in server;
聽聽聽fd_set FDS;
聽聽聽UINT m_Port;
聽聽聽PROTO m_Protocol;
聽聽聽char szTmp[256];//Error Message
public:
聽聽聽SOCKET m_Socket;
聽聽聽void __fastcall DoError();
聽聽聽void __fastcall InitSocket();
聽聽聽void __fastcall CreateListenSocket();
聽聽聽void __fastcall SetListenSocket();
聽聽聽void __fastcall BindListenSocket();
聽聽聽void __fastcall ListenSocket();

public:
聽聽聽__fastcall TListenThread(PROTO m_ProtocolA,UINT m_PortA,bool CreateSuspended);
聽聽聽virtual __fastcall ~TListenThread();
protected:
聽聽聽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)
{
聽聽聽m_AcceptSocket=m_Socket;
聽聽聽szTmp[0]='\0';
聽聽聽FreeOnTerminate=true;
}
__fastcall TCommunication::~TCommunication()
{
聽聽// closesocket(m_AcceptSocket);
}
void __fastcall TCommunication::Execute()
{
聽聽聽char buf[4096];
聽聽聽int nSize=0;
聽聽聽nSize=recv(m_AcceptSocket,(char FAR*)buf,4096,0);
聽聽聽if(nSize>0)
聽聽聽{
聽聽聽聽聽聽buf[nSize]='\0';
聽聽聽聽聽聽//Display
聽聽聽聽聽聽PSTNForm->Memo1->Lines->Add("Received Length:"+String(nSize));
聽聽聽聽聽聽PSTNForm->Memo1->Lines->Add("Received:"+StrPas(buf));
聽聽聽聽聽聽//Deliver
聽聽聽聽聽聽::Sleep(100);
聽聽聽聽聽聽send(m_AcceptSocket,buf,nSize,0);
聽聽聽}

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

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

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

void __fastcall TPSTNForm::FormDestroy(TObject *Sender)
{
聽聽聽if(pThread){
聽聽聽聽聽聽pThread->Suspend();
聽聽聽聽聽聽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 />聽聽C++ Builder涓彁渚涗簡(jiǎn)媯(gè)鏌ユ枃浠舵槸鍚﹀瓨鍦ㄧ殑鍑芥暟FileExists錛屼絾娌℃湁鎻愪緵媯(gè)鏌ョ洰褰曟槸鍚﹀瓨鍦ㄧ殑鍑芥暟錛屾垜浠彲浠ョ敤Windows API鍑芥暟FindFirstFile瀹炵幇榪欎釜鍔熻兘銆傜▼搴忓疄鐜板涓嬶細(xì)<br /><br />璁綾har *Dir涓哄甫鍒ゆ柇鐨勭洰褰?br />bool Exist;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鏈鍚庣粨鏋滐紝琛ㄧず鐩綍鏄惁瀛樺湪<br />if(Dir[strlen(Dir)]=='\\')Dir[strlen(Dir)-1]='\0';聽聽聽聽// 鍏堝垹闄ゆ渶鍚庣殑鈥淺鈥?br />WIN32_FIND_DATA wfd;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鏌ユ壘<br />HANDLE hFind=FindFirstFile(Dir,&wfd);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<br />if(hFind==INVALID_HANDLE_VALUE)Exist=false;聽聽聽聽聽聽聽聽聽聽聽聽// 娌℃湁鎵懼埌閰嶅錛岀洰褰曡偗瀹氫笉瀛樺湪<br />else<br />{<br />聽聽聽聽if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 媯(gè)鏌ユ壘鍒扮殑緇撴灉鏄惁鐩綍<br />聽聽聽聽聽聽聽聽Exist=true;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鏄洰褰?鐩綍瀛樺湪<br />聽聽聽聽else<br />聽聽聽聽聽聽聽聽Exist=false;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鏄洰褰?鐩綍涓嶅瓨鍦?br />聽聽聽聽FindClose(hFind);<br />} <br /><br />浜屻佹墦寮鐩綍閫夋嫨瀵硅瘽妗嗛夋嫨涓涓洰褰曪細(xì)<br /><br />聽聽澶у涓撲笟杞歡鍦ㄨ姹傝緭鍏ョ洰褰曠殑緙栬緫妗嗘梺閮芥斁浜?jiǎn)涓涓寜閽紝鐐瑰嚮鍚庢墦寮涓涓洰褰曠獥鍙o紝寰堝緙栫▼鐖卞ソ鑰呬篃甯屾湜鑳芥帉鎻¤繖涓柟娉曘傚疄鐜拌繖涓姛鑳借璋冪敤Windows API鍑芥暟SHBrowseForFolder錛屽畬鏁村0鏄庝負(fù)WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi)錛岃繑鍥炰竴涓狪TEMIDLIST綾誨瀷鐨勬寚閽堬紝閫氳繃榪欎釜鎸囬拡璋冪敤鍑芥暟SHGetPathFromIDList鍙互紜畾鎵閫夋嫨鐨勭洰褰曠殑鍏ㄥ悕縐般傚叆鍙備負(fù)BROWSEINFO緇撴瀯鐨勬寚閽堬紝榪欎釜緇撴瀯杈冧負(fù)澶嶆潅錛屾垚鍛樺涓嬫墍紺猴細(xì)<br /><br />HWND hwndOwner;聽聽聽聽聽聽聽聽// 鎷ユ湁瀵硅瘽妗嗙殑紿楀彛錛屽彲浠ヨ緗負(fù)Application->Handle <br />LPCITEMIDLIST pidlRoot; // ITEMIDLIST綾誨瀷鐨勬寚閽?琛ㄧず鍦ㄥ摢涓礬寰勪笅閫夋嫨錛屼竴鑸彲浠ヨ緗負(fù)NULL<br />LPSTR pszDisplayName;聽聽// 閫夋嫨鍚庯紝鎵閫夌洰褰曠殑鍚嶇О(涓嶅寘鍚埗綰х洰褰?琚嫹璐濆埌榪欎釜鎸囬拡鎸囧悜鐨勪綅緗?<br />LPCSTR lpszTitle;聽聽聽聽聽聽// 浣滀負(fù)鏍囬鏄劇ず鍦ㄥ璇濇涓洰褰曟爲(wèi)鐨勪笂闈紝鍙互鏍規(guī)嵁瀹為檯鎯呭喌璁劇疆 <br />UINT ulFlags;聽聽聽聽聽聽聽聽聽聽// 鏍囧織浣嶏紝鏈夌偣澶嶆潅錛屼竴鑸緗負(fù)BIF_RETURNONLYFSDIRS <br />BFFCALLBACK lpfn;聽聽聽聽聽聽// 鍥炶皟鍑芥暟錛屼竴鑸笉鐢紝璁劇疆涓篘ULL <br />LPARAM lParam;聽聽聽聽聽聽聽聽聽聽// 棰勫畾涔夌殑瀵硅瘽妗嗕紶閫掔粰鍥炶皟鍑芥暟鐨勫?br />int iImage;聽聽聽聽聽聽聽聽聽聽聽聽// 涓庢墍閫夌洰褰曠浉鍏寵仈鐨勫浘鏍囧湪緋葷粺鍥炬爣闆嗗悎涓殑绱㈠紩 <br />鍙互鐪嬪嚭錛屼嬌鐢ㄥ嚱鏁癝HBrowseForFolder榪樼湡楹葷儲(chǔ)錛屾櫘閫氱埍濂借呮帉鎻″畠紜疄鏈変竴瀹氱殑闅懼害錛岀幇緇欏嚭瀹屾暣紼嬪簭孌靛涓嬶細(xì) <br />#include <shlobj.h>聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 蹇呴』鍖呭惈鐨勫ご鏂囦歡<br />char SelectedDir[MAX_PATH];聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鏈緇堢粨鏋?br />BROWSEINFO bi;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鍏ュ弬<br />char FolderName[MAX_PATH];聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鎵閫夌洰褰曞悕縐幫紝渚嬪閫夋嫨C:\Windows\Font,鍒欎負(fù)Font <br />LPITEMIDLIST ItemID;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鎵閫夌洰褰曠殑緋葷粺鏍囧織鎸囬拡<br /><br />memset(SelectedDir, 0, MAX_PATH);聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鍒濆鍖栨渶緇堢粨鏋?br />memset(&bi, 0, sizeof(BROWSEINFO));聽聽聽聽// 鍒濆鍖栧叆鍙傛墍鏈夋暟鎹?br />bi.hwndOwner = Application->Handle;<br />bi.pszDisplayName = FolderName;<br />bi.lpszTitle = "璇烽夋嫨鐩綍";聽聽聽聽聽聽聽聽聽聽聽聽// 鏀規(guī)垚鑷繁甯屾湜鐨?br />bi.ulFlags=BIF_RETURNONLYFSDIRS;<br />ItemID = SHBrowseForFolder(&bi);聽聽聽聽聽聽// 璋冪敤鍑芥暟錛屾墦寮鐩綍閫夋嫨瀵硅瘽妗?br />if(ItemID)<br />{<br />聽聽聽聽SHGetPathFromIDList(ItemID, SelectedDir);聽聽聽聽聽聽// 鑾峰彇鎵閫夌洰褰曠殑鍏ㄥ悕<br />聽聽聽聽GlobalFree(ItemID);聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 榪斿洖鐨処temID鍗犵敤浜?jiǎn)绯痪l熻祫婧愶紝涓嶈蹇樹簡(jiǎn)閲婃斁<br />} <br /><br />涓夈佺洿鎺ュ緩绔嬪綰х洰褰曪細(xì)<br /><br />聽聽Windows API鎻愪緵浜?jiǎn)寰忕珛鐩綍鐨勫嚱鏁癈reateDirectory錛屼絾鏄皟鐢ㄥ墠瑕佷繚璇佺埗鐩綍蹇呴』瀛樺湪錛屽惁鍒欎細(xì)澶辮觸銆傚叾瀹烇紝鏈夋椂瓚婄駭寤虹珛澶氱駭鐩綍寰堟湁鐢紝鍥犱負(fù)鍦ㄥ緩绔嬬洰褰曠壒鍒槸寤虹珛澶氬眰鐩綍鏃訛紝灞傚眰鍔犱互鍒ゆ柇浼?xì)澶уぇ鍦板鍔牻E嬪簭鐨勫鏉傜▼搴︺傚浣曞疄鐜拌繖涓姛鑳藉憿錛熸湰浜虹敤閫掑綊鏂規(guī)硶璁捐浜?jiǎn)涓涓彲浠ョ洿鎺ュ緩绔嬪綰х洰褰曠殑鍑芥暟錛岀幇璇存槑濡備笅錛屼緵鍚勪綅鏈嬪弸鍙傝冦?br /><br />bool MakeDirectoryEx(const AnsiString &P)聽聽// 鍏ュ弬涓烘墦綆楀垱寤虹殑鐩綍鍚?鏍規(guī)嵁鎿嶄綔緇撴灉榪斿洖"true"鎴?false"<br />{<br />聽聽聽聽if(P.IsEmpty())return false;<br />聽聽聽聽int len=P.Length();<br />聽聽聽聽char *Path=P.c_str();<br />聽聽聽聽if(Path[len-1]=='\\')<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽len--;<br />聽聽聽聽聽聽聽聽Path[len]='\0';<br />聽聽聽聽}聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鍒犻櫎鏈熬鐨?\"<br />聽聽聽聽AnsiString Dir=Path;<br />聽聽聽聽// 鍒嗗紑鐖剁洰褰曞拰鏈韓鐩綍鍚嶇О<br />聽聽聽聽AnsiString Parent;<br />聽聽聽聽for(int i=len-1;i>0;i--)<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽if(Dir.IsPathDelimiter(i))<br />聽聽聽聽聽聽聽聽{<br />聽聽聽聽聽聽聽聽聽聽聽聽Parent=Dir.SubString(0,i);<br />聽聽聽聽聽聽聽聽聽聽聽聽break;<br />聽聽聽聽聽聽聽聽}<br />聽聽聽聽}<br />聽聽聽聽if(Parent.IsEmpty())return false; // 鐩綍鍚嶇О閿欒<br />聽聽聽聽bool Ret=true;<br />聽聽聽聽if(Parent.Length()>3)聽聽聽聽聽聽聽聽聽聽// 濡傛灉闀垮害灝忎簬3錛岃〃紺轟負(fù)紓佺洏鏍圭洰褰?br />聽聽聽聽聽聽聽聽Ret=DirectoryExistEx(Parent.c_str());// 媯(gè)鏌ョ埗鐩綍鏄惁瀛樺湪<br />聽聽聽聽if(!Ret)Ret=MakeDirectoryEx(Parent);聽聽// 鐖剁洰褰曚笉瀛樺湪,閫掑綊璋冪敤鍒涘緩鐖剁洰褰?br />聽聽聽聽if(Ret)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 鐖剁洰褰曞瓨鍦?鐩存帴鍒涘緩鐩綍<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽SECURITY_ATTRIBUTES sa;<br />聽聽聽聽聽聽聽聽sa.nLength=sizeof(SECURITY_ATTRIBUTES);<br />聽聽聽聽聽聽聽聽sa.lpSecurityDescriptor=NULL;<br />聽聽聽聽聽聽聽聽sa.bInheritHandle=0;<br />聽聽聽聽聽聽聽聽Ret=CreateDirectory(Path,&sa);<br />聽聽聽聽}<br />聽聽聽聽return Ret;<br />} <br />聽聽聽聽鍙互鐪嬪嚭鍩烘湰鏂規(guī)硶鏄?<br />鍏堟鏌ョ埗鐩綍鏄惁瀛樺湪錛岃繖閲岀敤鍒扮殑鍑芥暟DirectoryExistEx鍙互鎸夌収鍓嶉潰浠嬬粛鐨勬柟娉曡璁★紱 <br />濡傛灉鐖剁洰褰曞瓨鍦紝鍒欑洿鎺ュ垱寤虹洰褰?鍚﹀垯鑷垜璋冪敤鍒涘緩鐖剁洰褰曘?<br /><br /><br />鍥涖佺洿鎺ュ垹闄ゆ暣涓洰褰曪細(xì)<br /><br />聽聽鍦―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 />聽聽聽聽if(P.IsEmpty() || P.Length()<4)return false;聽聽聽聽聽聽聽聽// 鍙傛暟闀垮害蹇呴』澶т簬3錛屽嵆涓嶈兘涓虹鐩樻牴鐩綍鎴栫┖鐧?br />聽聽聽聽int len=P.Length();<br />聽聽聽聽char *Path=P.c_str();<br />聽聽聽聽AnsiString Dir=Path;<br />聽聽聽聽if(Path[len-1]!='\\')Dir=Dir+'\\';<br />聽聽聽聽AnsiString Files=Dir+"*.*";<br />聽聽聽聽WIN32_FIND_DATA wfd;<br />聽聽聽聽HANDLE hFind=FindFirstFile(Files.c_str(),&wfd);<br />聽聽聽聽bool Ret=true;<br />聽聽聽聽AnsiString Tmp;<br />聽聽聽聽if(hFind!=INVALID_HANDLE_VALUE)<br />聽聽聽聽{<br />聽聽聽聽聽聽聽聽bool bFind=true;<br />聽聽聽聽聽聽聽聽while(bFind)<br />聽聽聽聽聽聽聽聽{<br />聽聽聽聽聽聽聽聽聽聽聽聽if(wfd.cFileName[0]!='.') // . ..<br />聽聽聽聽聽聽聽聽聽聽聽聽{<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Tmp=Dir+wfd.cFileName;<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{ // 鍒犻櫎鎵鏈夊瓙鐩綍<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Ret=Ret&&DeleteDirectoryEx(Tmp.c_str(),false);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}else<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽{ // 鍒犻櫎鎵鏈夋枃浠?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SetFileAttributes(Tmp.c_str(),FILE_ATTRIBUTE_NORMAL);<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Ret=Ret&&DeleteFile(Tmp.c_str());<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}<br />聽聽聽聽聽聽聽聽聽聽聽聽}<br />聽聽聽聽聽聽聽聽聽聽聽聽bFind=FindNextFile(hFind,&wfd);<br />聽聽聽聽聽聽聽聽}<br />聽聽聽聽聽聽聽聽FindClose(hFind);<br />聽聽聽聽}<br />聽聽聽聽if(Ret)return RemoveDirectory(Path);<br />聽聽聽聽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)鏈夋墍甯姪!!

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

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

#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聽聽聽 32
#define DEF_PACKET_NUMBER聽 4聽聽聽 /* 鍙戦佹暟鎹姤鐨勪釜鏁?*/
#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;聽 /* 鐢ㄤ簬緇熻緇撴灉 */聽
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)錛?
//聽聽聽 蹇呴』灝嗘爣蹇椾綅璁句負(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);

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

if (argc >3)
{
聽datasize = atoi(argv[3]);
聽聽聽 if (datasize == 0)
聽聽聽聽聽聽聽 datasize = DEF_PACKET_SIZE;
聽if (datasize >1024)聽聽 /* 鐢ㄦ埛緇欏嚭鐨勬暟鎹寘澶у皬澶ぇ */
聽{
聽 fprintf(stderr,"WARNING : data_size is too large !\n");
聽 datasize = DEF_PACKET_SIZE;
聽}
}
else
聽聽聽 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))
聽statistic++; /* 鎴愬姛鎺ユ敹鐨勬暟鐩?+ */
Sleep(1000);

}

/*
Display the statistic result
*/
fprintf(stdout,"\nPing statistics for %s \n",dest_ip);
fprintf(stdout,"聽聽聽 Packets: Sent = %d,Received = %d, Lost = %d (%2.0f%% loss)\n",times,
聽聽聽聽 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ù)鎵ц鏃舵樉紺虹殑鐢婚潰 ***************\
*聽 C:\Documents and Settings\houzhijiang>ping 236.56.54.12聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽 Pinging 236.56.54.12 with 32 bytes of data:聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽 Request timed out.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽 Request timed out.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽 Request timed out.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽 Request timed out.聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽 Ping statistics for 236.56.54.12:聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽聽聽聽 Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
*聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 *
\*********************************************************/

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



]]>
主站蜘蛛池模板: 91嫩草国产在线观看免费| 一区二区免费电影| 2020久久精品亚洲热综合一本 | 99久久这里只精品国产免费 | 男男gay做爽爽的视频免费| 中文字幕无码亚洲欧洲日韩| 亚洲一区二区三区高清视频| 亚洲精品影院久久久久久| 亚洲第一网站免费视频| 亚洲免费在线视频播放| 亚洲日日做天天做日日谢| 最新亚洲卡一卡二卡三新区| 亚洲精品伦理熟女国产一区二区| 日本亚洲免费无线码 | 亚洲av片在线观看| 日韩亚洲人成网站| jizz免费在线观看| 日韩视频在线观看免费| h片在线免费观看| 日韩精品福利片午夜免费观着| 午夜色a大片在线观看免费| 精品国产免费观看久久久| 免费人成无码大片在线观看| 爱情岛论坛网亚洲品质自拍| 日韩va亚洲va欧洲va国产| 老司机亚洲精品影院| 亚洲国产激情在线一区| 爱爱帝国亚洲一区二区三区| rh男男车车的车车免费网站| 先锋影音资源片午夜在线观看视频免费播放| 91青青国产在线观看免费| AV片在线观看免费| 亚洲国产精品成人| 亚洲成AV人片在线播放无码| 亚洲国产精品专区| 精品亚洲成a人在线观看| a级在线观看免费| 99久久免费精品国产72精品九九| 国产一区在线观看免费| 亚洲av无码乱码国产精品fc2| 国产亚洲sss在线播放|