ﻣﺮوری ﺑﺮ TCP/IP
ﻧﮑﺘﻪ :ﻣﻄﺎﻟﺐ زﻳﺮ ﺗﻨﻬﺎ در ﺣﺪ ﻳﮏ ﻳﺎدﺁوري ﻣﻲ ﺑﺎﺷﺪ .اﮔﺮ اﻃﻼﻋﺎت ﮐﻤﻲ در ﻣﻮرد TCP/IPدارﻳﺪ ﺑﻪ ﮐﺘﺎﺑﻬﺎي ﻣﻮﺟﻮد ﻣﺮاﺟﻌﻪ
ﮐﻨﻴﺪ .
ﻣﺪل : TCP/IPﻣﺠﻤﻮﻋﻪ اي از ﭘﺮوﺗﮑﻠﻬﺎي ارﺗﺒﺎﻃﻲ ﻣﺮﺗﺒﻂ ﺑﻬﻢ اﺳﺖ ﮐﻪ ﻣﮑﺎﻧﻴﺰﻣﻬﺎ و ﺳﺮوﻳﺴﻬﺎي ﻣﻮرد ﻧﻴﺎز ﺟﻬﺖ ﺑﺮﻗﺮاري
ارﺗﺒﺎط در اﻳﻨﺘﺮﻧﺖ را ﻣﻬﻴﺎ ﻣﻲ ﮐﻨﻨﺪ .اﻳﻦ ﻣﺪل ﺷﺎﻣﻞ ۴ﻻﻳﻪ اﺳﺖ :
- ١ﻻﻳﻪ ﮐﺎرﺑﺮد : Application Layerﺷﺎﻣﻞ ﺑﺮﻧﺎﻣﻪ هﺎي ﮐﺎرﺑﺮدي و ﭘﺮوﺗﮑﻠﻬﺎﻳﻲ ﻣﺜﻞ Pop ،Smtp ،Ftp ،Httpو Telnetﻣﻲ
ﺑﺎﺷﺪ .
- ٢ﻻﻳﻪ اﻧﺘﻘﺎل : Transport Layerاﻳﻦ ﻻﻳﻪ ﺷﺎﻣﻞ دو ﭘﺮوﺗﮑﻞ TCPو UDPاﺳﺖ .ﭘﺮوﺗﮑﻞ TCPوﻇﻴﻔﻪ ﮐﻨﺘﺮل رﺳﻴﺪن ﺑﺴﺘﻪ
هﺎي دادﻩ ﺑﻪ ﻣﻘﺼﺪ ) TCP/IPدادﻩ هﺎ را ﺑﻪ ﺑﺴﺘﻪ هﺎي ﮐﻮﭼﮑﻲ ﺗﻘﺴﻴﻢ ﻣﻲ ﮐﻨﺪ ﮐﻪ هﺮ ﺑﺴﺘﻪ ﺣﺎوي ﺁدرس ﻓﺮﺳﺘﻨﺪﻩ ،
ﮔﻴﺮﻧﺪﻩ و ﺷﻤﺎرﻩ ﺑﺴﺘﻪ ﻣﻲ ﺑﺎﺷﺪ ( ،ﺗﺼﺤﻴﺢ ﺧﻄﺎ و ﻣﺮﺗﺐ ﺳﺎزي ﺑﺴﺘﻪ هﺎ را ﺑﺮﻋﻬﺪﻩ دارد UDP .ﭘﺮوﺗﮑﻠﻲ ﺷﺒﻴﻪ TCP
اﺳﺖ ﺑﺎ اﻳﻦ ﺗﻔﺎوت ﮐﻪ هﻴﭻ ﺿﻤﺎﻧﺘﻲ ﺑﺮاي رﺳﻴﺪن ﺑﺴﺘﻪ هﺎي اﻃﻼﻋﺎﺗﻲ در ﺁن وﺟﻮد ﻧﺪارد و ﻣﻌﻤﻮﻻً در اﻧﺘﻘﺎل ﺻﻮت و وﻳﺪﺋﻮ
روي اﻳﻨﺘﺰﻧﺖ اﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد .
- ٣ﻻﻳﻪ اﻳﻨﺘﺮﻧﺖ : Layer Internetﺷﺎﻣﻞ ﭘﺮوﺗﮑﻞ IPاﺳﺖ ﮐﻪ ﻣﺴﺌﻮل ﻣﺴﻴﺮﻳﺎﺑﻲ ﺑﺴﺘﻪ هﺎي اﻃﻼﻋﺎﺗﻲ ﻣﻲ ﺑﺎﺷﺪ .
- ۴ﻻﻳﻪ دﺳﺘﺮﺳﻲ ﺑﻪ ﺷﺒﮑﻪ : Link Layerﺷﺎﻣﻞ ﺑﺨﺸﻲ از هﺴﺘﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ و ﻧﻴﺰ دراﻳﻮرهﺎي واﺳﻂ ﺷﺒﮑﻪ ﺑﺮاي ﮐﺎر
ﺑﺎ ﺳﺨﺖ اﻓﺰار ﺷﺒﮑﻪ ﻣﻲ ﺑﺎﺷﺪ .
ﺳﻮﮐﺖ Socketو ﭘﻮرت : Portﺳﻮﮐﺖ ﻳﮏ ورودي اﻧﺘﺰاﻋﻲ در ﻻﻳﻪ اﻧﺘﻘﺎل ﻣﻲ ﺑﺎﺷﺪ ﮐﻪ ﺑﺮاي اﻳﺠﺎد ارﺗﺒﺎﻃﺎت ﻣﺨﺘﻠﻒ TCP/IP
ﺑﮑﺎر ﻣﻲ رود .اﻏﻠﺐ ﺑﺮﻧﺎﻣﻪ هﺎي ﮐﺎرﺑﺮدي ﮐﻪ از TCPو UDPاﺳﺘﻔﺎدﻩ ﻣﻲ ﮐﻨﻨﺪ ،ﻋﻤﻠﻴﺎت اﻧﺘﻘﺎل اﻃﻼﻋﺎت ﺧﻮد را ﺑﺎ ﺳﺎﺧﺖ
ﻳﮏ ﺳﻮﮐﺖ و ﺳﭙﺲ اﻧﺠﺎم ﻳﮑﺴﺮي ﻋﻤﻠﻴﺎت روي ﺁن اﻧﺠﺎم ﻣﻲ دهﻨﺪ .اﻳﻦ ﻋﻤﻠﻴﺎت ﻋﺒﺎرﺗﻨﺪ از :
- ١ﻋﻤﻠﻴﺎت ﮐﻨﺘﺮﻟﻲ :ﺷﺎﻣﻞ اﺧﺘﺼﺎص ﻳﮏ ﺷﻤﺎرﻩ ﭘﻮرت ﺑﻪ ﺳﻮﮐﺖ initiate ،ﮐﺮدن ﻳﺎ accpetﮐﺮدن ﻳﮏ ارﺗﺒﺎط ،از ﺑﻴﻦ ﺑﺮدن
ﺳﻮﮐﺖ
- ٢ﻋﻤﻠﻴﺎت اﻧﺘﻘﺎل دادﻩ :ﺷﺎﻣﻞ ﻧﻮﺷﺘﻦ دادﻩ روي ﺳﻮﮐﺖ و ﺧﻮاﻧﺪن دادﻩ از ﺳﻮﮐﺖ
- ٣ﻋﻤﻠﻴﺎت ﺑﺮرﺳﻲ وﺿﻌﻴﺖ :ﻣﺜﻞ ﭘﻴﺪا ﮐﺮدن ﺁدرس IPﻣﺮﺑﻮط ﺑﻪ ﺳﻮﮐﺖ ،ﭘﻴﺪا ﮐﺮدن ﺷﻤﺎرﻩ ﭘﻮرت ﺳﻮﮐﺖ و ﻏﻴﺮﻩ
ﺑﺮﻧﺎﻣﻪ Internet Explorerﻳﺎ iexplore.exeدر واﻗﻊ ﺑﺮﻧﺎﻣﻪ ﮐﻮﭼﮑﻲ اﺳﺖ ﮐﻪ وﻇﻴﻔﻪ اﺻﻠﻲ ﺁن اﻳﺠﺎد ﭼﺎرﭼﻮﺑﻲ ﺑﺮاي ﺑﻬﻢ
ﭘﻴﻮﺳﺘﻦ ﻋﻨﺎﺻﺮ ﻣﺨﺘﻠﻒ اﺳﺖ و اﻳﻦ ﻋﻨﺎﺻﺮ هﺴﺘﻨﺪ ﮐﻪ وﻇﺎﻳﻒ اﺻﻠﻲ ﻣﺜﻞ loadﮐﺮدن ﺻﻔﺤﺎت وب ،اﺟﺮاي ﮐﺪهﺎي Htmlو
ﻏﻴﺮﻩ را اﻧﺠﺎم ﻣﻲ دهﻨﺪ .اﺻﻠﻲ ﺗﺮﻳﻦ ﻋﻨﺼﺮي ﮐﻪ ﻣﺴﺘﻘﻴﻤﺎً ﺗﻮﺳﻂ iexplore.exeاﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد ﮐﻨﺘﺮل ) Webbrowser
ﻣﻮﺟﻮد در ﻓﺎﻳﻞ ( shdocrw.dllﻣﻲ ﺑﺎﺷﺪ .وﻇﻴﻔﻪ اﻳﻦ ﻓﺎﻳﻞ ، dllﻋﺒﺎرت اﺳﺖ از ﺣﺮﮐﺖ ﺑﻴﻦ ﺻﻔﺤﺎت وب ،ﻣﺪﻳﺮﻳﺖ ﺗﺎرﻳﺨﭽﻪ
ﺻﻔﺤﺎت دﻳﺪﻩ ﺷﺪﻩ و ﻏﻴﺮﻩ .اﻳﻦ ﻓﺎﻳﻞ ﺧﻮد از ﻓﺎﻳﻞ دﻳﮕﺮي ﺑﻨﺎم Mshtml.dllاﺳﺘﻔﺎدﻩ ﻣﻲ ﮐﻨﺪ ﮐﻪ وﻇﻴﻔﻪ ﺁن ﺑﺮرﺳﻲ و اﺟﺮاي
ﻓﺎﻳﻠﻬﺎي htmlاﺳﺖ .ﻣﺎﻳﮑﺮوﺳﺎﻓﺖ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﺎن اﻳﻦ اﻣﮑﺎن را دادﻩ ﮐﻪ ﺑﺘﻮاﻧﻨﺪ در ﺑﺮﻧﺎﻣﻪ هﺎﻳﺸﺎن از ﮐﻨﺘﺮل webbrowser
اﺳﺘﻔﺎدﻩ ﮐﻨﻨﺪ .ﺑﺎ اﺳﺘﻔﺎدﻩ از اﻳﻦ ﮐﻨﺘﺮل ﻣﻲ ﺗﻮان ﺑﻪ ﺳﺎدﮔﻲ ﻳﮏ ﻣﺮورﮔﺮ وب ﺗﻘﺮﻳﺒﺎً ﮐﺎﻣﻞ ﺳﺎﺧﺖ .
URLﺁدرس ﻣﻘﺼﺪ ﻣﻲ ﺑﺎﺷﺪ Flags .ﻧﺤﻮﻩ ﺑﺎز ﺷﺪن ﺁدرس ﻣﻘﺼﺪ را ﺗﻌﻴﻴﻦ ﻣﻲ ﮐﻨﺪ .اﮔﺮ اﻳﻦ ﭘﺎراﻣﺘﺮ ذﮐﺮ ﻧﺸﻮد ﺁدرس ﺟﺪﻳﺪ
در ﭘﻨﺠﺮﻩ ﻓﻌﻠﻲ ﺑﺎز ﺧﻮاهﺪ ﺷﺪ و ﺑﻪ ﻟﻴﺴﺖ ﺗﺎرﻳﺨﭽﻪ اﺿﺎﻓﻪ ﺷﺪﻩ و اﮔﺮ ﮐﭙﻲ ﺁن در cache temperoryﻣﻮﺟﻮد ﺑﺎﺷﺪ از ﺁﻧﺠﺎ
ﺧﻮاﻧﺪﻩ ﻣﻲ ﺷﻮد .ﻣﻘﺎدﻳﺮ ﭘﺎراﻣﺘﺮ Flagsﻋﺒﺎرﺗﻨﺪ از :
: NavOpenInNewWindow -ﺁدرس ﺟﺪﻳﺪ را در ﭘﻨﺠﺮﻩ ﺟﺪﻳﺪي ﺑﺎز ﻣﻲ ﮐﻨﺪ .
: NavNoHistory -ﺑﻪ ﻟﻴﺴﺖ ﺗﺎرﻳﺨﭽﻪ اﺿﺎﻓﻪ ﻧﻤﻲ ﺷﻮد ﺑﻠﮑﻪ ﺟﺎﻳﮕﺰﻳﻦ ﺻﻔﺤﻪ ﻓﻌﻠﻲ ﻣﻲ ﺷﻮد .
: NavNoReadFromCache -ﺻﻔﺤﻪ ﺟﺪﻳﺪ از cacheﺧﻮاﻧﺪﻩ ﻧﻤﻲ ﺷﻮد .
: NavNoWriteToCache -ﺻﻔﺤﻪ ﺟﺪﻳﺪ روي cacheﻧﻮﺷﺘﻪ ﻧﻤﻲ ﺷﻮد
Eventهﺎي ﮐﻨﺘﺮل : webbrowserاﻳﻦ eventهﺎ ﻣﺮﺑﻮط ﺑﻪ ﻣﺮور در وب و ﺗﻐﻴﻴﺮ ﺣﺎﻟﺖ ﺁن هﺴﺘﻨﺪ :
: CommandStateChange – 1ﺑﺮاي ﻓﻌﺎل ﻳﺎ ﻏﻴﺮﻓﻌﺎل ﮐﺮدن دﮐﻤﻪ هﺎي Forwardو Backدر ﻣﺮورﮔﺮ اﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد .
ﺷﮑﻞ ﮐﻠﻲ ﻓﺮاﺧﻮاﻧﻲ اﻳﻦ eventﺑﺼﻮرت زﻳﺮ اﺳﺖ :
(Command As Long, ByVal Enable As Boolean Private Sub WebBrowser1_CommandStateChange(ByVal
ﮐﻪ commandﻓﺮﻣﺎﻧﻲ اﺳﺖ ﮐﻪ ﺣﺎﻟﺖ ﻓﻌﺎل ﺁن ﺗﻐﻴﻴﺮ ﮐﺮدﻩ اﺳﺖ و دو ﻣﻘﺪار ﻣﻲ ﮔﻴﺮد 1 :و 3ﮐﻪ ﺑﺘﺮﺗﻴﺐ ﻣﻌﺎدل ﻓﺮﻣﺎﻧﻬﺎي
GoForwardو GoBackهﺴﺘﻨﺪ .
Enableﻓﻌﺎل ﻳﺎ ﻏﻴﺮﻓﻌﺎل ﺑﻮدن ﻓﺮﻣﺎن را ﺗﻌﻴﻴﻦ ﻣﻲ ﮐﻨﺪ .
: DocumentComplete – 2اﻳﻦ eventزﻣﺎﻧﻲ ﻓﻌﺎل ﻣﻲ ﺷﻮد ﮐﻪ ﺻﻔﺤﻪ در ﺣﺎل loadﺷﺪن ﺑﻪ ﺣﺎﻟﺖ
ReadyState_Completeﺑﺮود .ﺷﮑﻞ ﮐﻠﻲ ﻓﺮاﺧﻮاﻧﻲ اﻳﻦ eventﺑﺼﻮرت زﻳﺮ اﺳﺖ :
(Variant Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As
ﮐﻪ pDispارﺟﺎﻋﻲ ﺑﻪ ﮐﻨﺘﺮل webbrowserاﺳﺖ ﮐﻪ eventدر ﺁن رخ دادﻩ اﺳﺖ و URLﺁدرس ﺻﻔﺤﻪ در ﺣﺎل loadﺷﺪن
اﺳﺖ .
: DownloadBegin – 3اﻳﻦ eventدر ﺁﻏﺎز ﺣﺮﮐﺖ ﺑﻪ ﺻﻔﺤﻪ ﺟﺪﻳﺪ روي ﻣﻲ دهﺪ و هﻴﭻ ﭘﺎراﻣﺘﺮي ﻧﻤﻲ ﮔﻴﺮد .ﻣﺮورﮔﺮ ﻣﻲ
ﺗﻮاﻧﺪ در اﻳﻦ eventﭘﻴﻐﺎﻣﻲ ﺑﺮاي ﺷﺮوع ﻋﻤﻠﻴﺎت ﺟﺪﻳﺪ ﻧﺸﺎن ﻣﻲ دهﺪ .
: DownloadComplete – 4اﻳﻦ eventدر ﭘﺎﻳﺎن ﻋﻤﻠﻴﺎت ﻳﺎ در ﺻﻮرت اﻧﺼﺮاف ﮐﺎرﺑﺮ ﻳﺎ ﺑﺮوز ﺧﻄﺎ روي ﻣﻲ دهﺪ .
: ProgressChange – 5ﺑﺎ ﺑﺮوز هﺮ ﺗﻐﻴﻴﺮي در وﺿﻌﻴﺖ ، loadاﻳﻦ eventروي ﻣﻲ دهﺪ .ﺷﮑﻞ ﮐﻠﻲ ﻓﺮاﺧﻮاﻧﻲ ﺁن ﺑﺼﻮرت
زﻳﺮ اﺳﺖ :
ﮐﻪ Progressﻧﺸﺎن دهﻨﺪﻩ ﭘﻴﺸﺮﻓﺖ ﻋﻤﻠﻴﺎت ) ﺑﺎﻳﺘﻬﺎي loadﺷﺪﻩ ( اﺳﺖ .ﭘﺎراﻣﺘﺮ ProgressMaxﺗﻌﺪاد ﮐﻞ ﺑﺎﻳﺘﻬﺎﻳﻲ ﮐﻪ
ﺑﺎﻳﺪ loadﺷﻮﻧﺪ را ﻧﺸﺎن ﻣﻲ دهﺪ ﺑﻨﺎﺑﺮ اﻳﻦ :
WebBrowser.Navigate textbox.text
ﻣﻘﺪﻣﻪ :ﮐﻨﺘﺮل Internet Transferﻧﺴﺒﺖ ﺑﻪ ﮐﻨﺘﺮل WebBrowserﮐﻪ در روزهﺎي ﻗﺒﻠﻲ ﻣﻌﺮﻓﻲ ﺷﺪ در ﺳﻄﺢ ﭘﺎﻳﻴﻨﺘﺮي
ﻗﺮار دارد .اﻳﻦ ﮐﻨﺘﺮل ﺑﺎ اﺳﺘﻔﺎدﻩ از دو ﭘﺮوﺗﮑﻞ HTTPو FTPﻣﻲ ﺗﻮاﻧﺪ دادﻩ هﺎ را ﻣﻨﺘﻘﻞ ﮐﻨﺪ .اﻳﻦ ﮐﻨﺘﺮل زﻣﺎﻧﻴﮑﻪ از ﭘﺮوﺗﮑﻞ
HTTPاﺳﺘﻔﺎدﻩ ﻣﻲ ﮐﻨﺪ ﺑﺎ هﻤﺎن روش ﮐﻨﺘﺮل WebBrowserﺑﻪ ﺳﺮوﻳﺲ دهﻨﺪﻩ ﺻﻔﺤﺎت وب ﻣﺘﺼﻞ ﻣﻲ ﺷﻮد اﻣﺎ ﺑﺠﺎي ﺁﻧﮑﻪ
ﺻﻔﺤﻪ وب را ﻧﻤﺎﻳﺶ دهﺪ ﻣﺘﻦ Htmlﺻﻔﺤﻪ را ﺑﺎزﻳﺎﺑﻲ ﻣﻲ ﮐﻨﺪ .هﻤﭽﻨﻴﻦ زﻣﺎﻧﻴﮑﻪ اﻳﻦ ﮐﻨﺘﺮل از ﭘﺮوﺗﮑﻞ FTPاﺳﺘﻔﺎدﻩ ﻣﻲ
ﮐﻨﺪ ﻗﺎدرﺳﺖ ﻓﺎﻳﻠﻬﺎ را ﺑﻴﻦ ﮐﺎﻣﭙﻴﻮﺗﺮهﺎي روي ﺷﺒﮑﻪ ﻣﻨﺘﻘﻞ ﺳﺎزد .
اﺗﺼﺎﻻت : HTTPهﻤﺎﻧﻄﻮر ﮐﻪ ﻣﻲ داﻧﻴﺪ ،ﭘﺮوﺗﮑﻞ HTTPاﺳﺘﺎﻧﺪارد وب ﻣﻲ ﺑﺎﺷﺪ .ﺻﻔﺤﺎت وب ﺑﺎ زﺑﺎن Htmlﻧﻮﺷﺘﻪ ﻣﻲ
ﺷﻮﻧﺪ و اﻧﺘﻘﺎل ﺁﻧﻬﺎ از serverﺑﻪ clientﺗﻮﺳﻂ ﭘﺮوﺗﮑﻞ HTTPﺻﻮرت ﻣﻲ ﮔﻴﺮد .
ﻣﺘﺪ : OpenURLﺳﺎدﻩ ﺗﺮﻳﻦ راﻩ اﺳﺘﻔﺎدﻩ از ﮐﻨﺘﺮل ITﻣﺘﺪ OpenURLاﺳﺖ .ﺷﮑﻞ ﮐﻠﻲ اﻳﻦ ﻣﺘﺪ ﺑﺼﻮرت زﻳﺮ اﺳﺖ :
Inet.OpenURL(url,DataType)x
ﮐﻪ urlﺁدرس ﺻﻔﺤﻪ وب و DataTypeﻧﻮع دادﻩ ﺑﺎزﻳﺎﺑﻲ ﺷﻮﻧﺪﻩ اﺳﺖ و دو ﻣﻘﺪار ) icStringدادﻩ ﻣﺘﻨﻲ ( ﻳﺎ ) icByteArray
دادﻩ ﺑﺎﻳﻨﺮي ( را ﻣﻲ ﮔﻴﺮد .ﻣﻘﺪار ﺑﺎزﮔﺸﺘﻲ اﻳﻦ ﻣﺘﺪ ،دادﻩ هﺎي ﻣﻨﺘﻘﻞ ﺷﺪﻩ اﺳﺖ .
اﻳﻦ ﻣﺘﺪ ﺑﺼﻮرت ﺳﻨﮑﺮون ﮐﺎر ﻣﻲ ﮐﻨﺪ ﻳﻌﻨﻲ در ﺗﻤﺎم ﻣﺪت ﮐﺎر ﺁن ﺑﺮﻧﺎﻣﻪ ﻧﻤﻲ ﺗﻮاﻧﺪ ﮐﺎر دﻳﮕﺮي اﻧﺠﺎم دهﺪ .اﮔﺮ از
icByteArrayاﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ ﺑﺎﻳﺪ ﻣﻘﺪار ﺑﺎزﮔﺸﺘﻲ ﺁﻧﺮا در ﻳﮏ اراﻳﻪ ﺑﺎﻳﺖ ﻗﺮار دهﻴﺪ .
ﻣﺜﺎل : 1از ﺑﺨﺶ Componentدر ﻣﻨﻮي Projectﻣﻮرد Microsoft Internet Transfer Control 6.0را ﺑﻪ toolbarﺧﻮد اﺿﺎﻓﻪ
ﮐﻨﻴﺪ .ﺳﭙﺲ ﻳﮏ ﮐﻨﺘﺮل ITروي ﻓﺮم ﻗﺮار دهﻴﺪ و هﻤﭽﻨﻴﻦ ﻳﮏ Rich Textboxو ﻳﮏ دﮐﻤﻪ روي ﻓﺮم ﻗﺮار دهﻴﺪ و ﮐﺪ زﻳﺮ را
ﺑﺮاي eventﻣﺮﺑﻮط ﺑﻪ ﮐﻠﻴﮏ دﮐﻤﻪ ﺑﻨﻮﻳﺴﻴﺪ :
TextBox.text=Inet.OpenURL(“www.microsoft.com”,icString)x
ﻣﺜﺎل : 2ﮐﺪ زﻳﺮ دادﻩ هﺎي ﺑﺎﻳﻨﺮي را از اﻳﻨﺘﺮﻧﺖ ﺧﻮاﻧﺪﻩ و ﺁﻧﻬﺎ را در ﻳﮏ ﻓﺎﻳﻞ ذﺧﻴﺮﻩ ﻣﻲ ﮐﻨﺪ :
روﻳﺪاد : StateChangedﮐﻨﺘﺮل ITﻓﻘﻂ ﻳﮏ eventدارد ﮐﻪ StateChangedﻣﻲ ﺑﺎﺷﺪ .اﻳﻦ eventزﻣﺎﻧﻲ روي ﻣﻲ دهﺪ ﮐﻪ
Stateﮐﻨﺘﺮل ﺗﻐﻴﻴﺮ ﮐﻨﺪ State .هﺮ اﺗﻔﺎﻗﻲ اﺳﺖ ﮐﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ از ﺁن ﻣﻄﻠﻊ ﺷﻮد .ﺗﻌﺮﻳﻒ ﮐﻠﻲ اﻳﻦ eventﺑﺼﻮرت زﻳﺮ اﺳﺖ :
ﮐﻪ NewStateﻣﻘﺪاري اﺳﺖ ﮐﻪ ﺣﺎﻟﺖ ﺟﺪﻳﺪ را ﺑﻴﺎن ﻣﻲ ﮐﻨﺪ .ﻣﻘﺎدﻳﺮ ﻣﻤﮑﻦ اﻳﻦ ﭘﺎراﻣﺘﺮ ﻋﺒﺎرﺗﻨﺪ از :
: icNoneﺣﺎﻟﺖ ﺗﻐﻴﻴﺮ ﻧﮑﺮدﻩ اﺳﺖ .
: icResolvingHostدر ﺣﺎل ﺟﺴﺘﺠﻮي ﺁدرس IPﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻮردﻧﻈﺮ .
: icHostResolvedﺁدرس IPﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻮردﻧﻈﺮ ﻳﺎﻓﺖ ﺷﺪ .
: icConnectingدر ﺣﺎل اﺗﺼﺎل ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ
: icConnectedاﺗﺼﺎل ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ ﺑﺮﻗﺮار ﺷﺪ .
: icRequestingدر ﺣﺎل ارﺳﺎل درﺧﻮاﺳﺖ ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ
: icRequestSentدرﺧﻮاﺳﺖ ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ ارﺳﺎل ﺷﺪ .
: icReceivingResponseدر ﺣﺎل درﻳﺎﻓﺖ ﭘﺎﺳﺦ از ﮐﺎﻣﭙﻮﺗﺮ ﻣﻘﺼﺪ .
: icResponseReceivedﭘﺎﺳﺦ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ درﻳﺎﻓﺖ ﺷﺪ .
: icDisconnectingدر ﺣﺎل ﻗﻄﻊ اﺗﺼﺎل ﺑﺎ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ .
: icDisconnectedاﺗﺼﺎل ﻣﻘﺼﺪ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﻗﻄﻊ ﺷﺪ .
: icErrorدر ارﺗﺒﺎط ﺑﺎ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ ﺧﻄﺎﻳﻲ رخ دادﻩ اﺳﺖ .
: icResponseCompletedﺗﮑﻤﻴﻞ ﭘﺎﺳﺦ – ﺗﻤﺎم دادﻩ هﺎ درﻳﺎﻓﺖ ﺷﺪ .
ﺗﺸﺨﻴﺺ ﺧﻄﺎ در ﻋﻤﻠﻴﺎت اﻧﺘﻘﺎل دادﻩ اهﻤﻴﺖ ﺑﺎﻻﻳﻲ دارد و StateChangedدر ﺻﻮرت ﺑﺮوز هﺮ ﺧﻄﺎﻳﻲ ﻣﻘﺪار icErrorرا
ﺑﺮﻣﻲ ﮔﺮداﻧﺪ و اﻃﻼﻋﺎت ﺧﻄﺎ را در دو ﺧﺎﺻﻴﺖ ResponseCodeو ResponseInfoﺑﺮﻣﻲ ﮔﺮداﻧﺪ .
اﻧﺘﻘﺎل دادﻩ ﺑﺼﻮرت ﺁﺳﻨﮑﺮون :ﮐﻨﺘﺮل ITﻣﺘﺪهﺎي اﻧﻌﻄﺎف ﭘﺬﻳﺮ دﻳﮕﺮي هﻢ دارد ﮐﻪ ﺁﺳﻨﮑﺮون هﺴﺘﻨﺪ و اﺟﺎزﻩ ﻣﻲ دهﻨﺪ ﺗﺎ
هﻤﺰﻣﺎن ﺑﺎ ﻋﻤﻠﻴﺎت اﻧﺘﻘﺎل دادﻩ ،ﺑﺮﻧﺎﻣﻪ ﺑﻪ وﻇﺎﻳﻒ دﻳﮕﺮي هﻢ ﺑﭙﺮدازد .اﻳﻦ ﻣﺘﺪهﺎ ﺑﺎ اﺳﺘﻔﺎدﻩ از Event Driven Modelﮐﺎر
ﻣﻲ ﮐﻨﻨﺪ .ﺑﺪﻳﻦ ﻣﻌﻨﻲ ﮐﻪ وﻗﺘﻲ ﺑﺮﻧﺎﻣﻪ درﺧﻮاﺳﺖ اﻧﺘﻘﺎل دادﻩ اي را ﻣﻲ دهﺪ ﮐﻨﺘﺮل ITدرﺧﻮاﺳﺖ را در زﻣﻴﻨﻪ ﺑﺮﻧﺎﻣﻪ اﻧﺠﺎم
ﻣﻲ دهﺪ و ﺑﺮﻧﺎﻣﻪ ازاد اﺳﺖ ﺗﺎ ﺑﻪ ﮐﺎرهﺎي دﻳﮕﺮش ﺑﭙﺮدازد .زﻣﺎﻧﻴﮑﻪ دادﻩ هﺎ ﺑﺎزﻳﺎﺑﻲ ﺷﻮد ،دادﻩ هﺎ را از ﺑﺎﻓﺮ داﺧﻠﻲ ﮐﻨﺘﺮل
ITﻣﻲ ﺧﻮاﻧﺪ .
ﻣﺘﺪ : GetChunkدر ﻋﻤﻠﻴﺎت اﻧﺘﻘﺎل ﺁﺳﻨﮑﺮون ،ﺑﺎﻳﺴﺘﻲ دادﻩ را ﺗﻮﺳﻂ اﻳﻦ ﻣﺘﺪ از ﺑﺎﻓﺮ داﺧﻠﻲ ﮐﻨﺘﺮل ITﺑﮕﻴﺮﻳﻢ :
Inet.GetChunk(datasize[,datatype])x
ﮐﻪ ﭘﺎراﻣﺘﺮ datasizeاز ﻧﻮع longﺑﻮدﻩ و ﺗﻌﻴﻴﻦ ﻣﻲ ﮐﻨﺪ ﭼﻨﺪ ﺑﺎﻳﺖ از ﺑﺎﻓﺮ ﺧﻮاﻧﺪﻩ ﺷﻮد و ﭘﺎراﻣﺘﺮ اﺧﺘﻴﺎري datatypeﻧﻮع دادﻩ را
ﻣﺸﺨﺺ ﻣﻲ ﮐﻨﺪ و ﻣﻲ ﺗﻮاﻧﺪ ﻣﻘﺎدﻳﺮ icStringو icByteArrayرا ﺑﮕﻴﺮد .
زﻣﺎﻧﻴﮑﻪ StateChangedوارد ﺣﺎﻟﺘﻬﺎي icResponseReceivedو ﻳﺎ icResponseCompletedﺷﺪ ﺑﺎﻳﺪ از GetChunkاﺳﺘﻔﺎدﻩ
ﮐﻨﻴﺪ .ﺑﺪﻳﻦ ﺻﻮرت ﮐﻪ از ﻳﮏ ﺣﻠﻘﻪ اﺳﺘﻔﺎدﻩ ﻣﻲ ﮐﻨﻴﻢ ﺗﺎ ﮐﻞ ﺑﺎﻓﺮ را ﺑﺨﻮاﻧﻴﻢ :
ﺑﺮاي ﺑﺎﻻﺑﺮدن ﮐﺎراﻳﻲ ،ﺑﻬﺘﺮ اﺳﺖ از ﻗﻄﻌﺎت ﮐﻮﭼﮏ ) ﺑﻴﻦ 512ﺗﺎ 1024ﺑﺎﻳﺘﻲ ( اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ .
ﻣﺘﺪ : Executeو اﻣﺎ اﻧﻌﻄﺎف ﭘﺬﻳﺮﺗﺮﻳﻦ ﻣﺘﺪ ﮐﻨﺘﺮل ، ITﻣﺘﺪ Executeاﺳﺖ .ﻓﺮﻣﺖ ﮐﻠﻲ اﻳﻦ ﻣﺘﺪ ﺑﺼﻮرت زﻳﺮ اﺳﺖ :
Inet.Execute(url,Command,Data,RequestHeaders)x
ﮐﻪ urlﺁدرس ﻣﻘﺼﺪ Command ،ﻓﺮﻣﺎﻧﻲ اﺳﺖ ﮐﻪ ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ دادﻩ ﻣﻲ ﺷﻮد و Dataو RequestHeadersاﻃﻼﻋﺎت
اﺿﺎﻓﻲ ﻻزم ﺑﺮاي اﺟﺮاي ﻓﺮﻣﺎن دادﻩ ﺷﺪﻩ اﺳﺖ .ﻓﺮﻣﺎﻧﻬﺎي Commandهﻤﺎن ﻓﺮﻣﺎﻧﻬﺎي HTTPهﺴﺘﻨﺪ ﮐﻪ ﻋﺒﺎرﺗﻨﺪ از :
: GET -درﻳﺎﻓﺖ دادﻩ هﺎ از ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ
: HEAD -درﻳﺎﻓﺖ اﻃﻼﻋﺎت headerاز ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ
: POST -ارﺳﺎل اﻃﻼﻋﺎت ﻻزم ﺑﺮاي ﺗﮑﻤﻴﻞ درﺧﻮاﺳﺖ
: PUT -ارﺳﺎل ﻓﺎﻳﻞ ﺑﺮاي ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻴﺰﺑﺎن ) ( upload
ﻓﺮﻣﺎن GETﭘﺮﮐﺎرﺑﺮدﺗﺮﻳﻦ ﻓﺮﻣﺎن ﻣﺘﺪ Executeاﺳﺖ و دادﻩ هﺎي ﺧﻮاﻧﺪﻩ ﺷﺪﻩ را در ﺑﺎﻓﺮ داﺧﻠﻲ ﺑﺎﻓﺮ ﮐﻨﺘﺮل ITﻗﺮار ﻣﻲ دهﺪ
ﺗﺎ ﺑﺘﻮان ﺑﺎ ﻣﺘﺪ GetChunkﺁﻧﻬﺎ را ﺑﺎزﻳﺎﺑﻲ ﻧﻤﻮد .
ﻣﺜﺎل :
Inet.Execute http://www.microsoft.com,”GET”x
اﺗﺼﺎﻻت FTP
ﭘﺮوﺗﮑﻞ FTPﻋﻼوﻩ ﺑﺮ ﻧﻘﻞ و اﻧﺘﻘﺎل ﻓﺎﻳﻞ ﺑﻴﻦ دو ﮐﺎﻣﭙﻴﻮﺗﺮ ،ﻣﻲ ﺗﻮاﻧﺪ ﻧﻮﻋﻲ ﻣﺪﻳﺮﻳﺖ ﻓﺎﻳﻞ ) ﻣﺜﻞ ﺣﺬف ﻓﺎﻳﻞ ﻳﺎ اﻳﺠﺎد ﭘﻮﺷﻪ (
روي ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ را اﻧﺠﺎم دهﺪ FTP .در اﻧﺘﻘﺎل ﻓﺎﻳﻞ ﺑﺴﻴﺎر ﻗﻮﻳﺘﺮ از HTTPاﺳﺖ وﻟﻲ ﺑﻪ ﻣﺮاﺗﺐ ﭘﻴﭽﻴﺪﻩ ﺗﺮ از HTTPﻣﻲ
ﺑﺎﺷﺪ اﻣﺎ ﮐﻨﺘﺮل ITاﻳﻦ ﭘﻴﭽﻴﺪﮔﻴﻬﺎ را از دﻳﺪ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺲ ﻣﺨﻔﻲ ﮐﺮدﻩ اﺳﺖ .
ﺑﺮاي ﮐﺎر ﺑﺎ ﺳﺮورهﺎي FTPﺑﺎﻳﺪ ﺑﻪ ﺁﻧﻬﺎ Loginﻧﻤﻮد .ﻧﻮع ﺧﺎﺻﻲ از Loginﺑﻪ ﻧﺎم ) Anonymous Loginورود ﻧﺎﺷﻨﺎس (
وﺟﻮد دارد ﮐﻪ ﺑﺎ ﺁن ﮐﺎرﺑﺮان ﻣﻲ ﺗﻮاﻧﻨﺪ ﺑﺪون ﻣﺤﺪودﻳﺖ از ﺳﺎﻳﺖ FTPاﺳﺘﻔﺎدﻩ ﮐﻨﻨﺪ .ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﮐﻪ ﺣﺘﻲ ﺑﺮاي ورود
ﻧﺎﺷﻨﺎس هﻢ ﻧﻴﺎز ﺑﻪ ﻧﺎم ﮐﺎرﺑﺮ و ﮐﻠﻤﻪ ﻋﺒﻮر اﺳﺖ .ﺑﺮاي ارﺳﺎل ﻧﺎم ﮐﺎرﺑﺮ و ﮐﻠﻤﻪ ﻋﺒﻮر از ﺧﻮاص usernameو password
ﮐﻨﺘﺮل ITاﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد .اﮔﺮ ﺧﺎﺻﻴﺖ usernameﺧﺎﻟﻲ ﺑﺎﺷﺪ ) ، ( blankﮐﻨﺘﺮل ITﺑﻄﻮر ﺧﻮدﮐﺎر از anonymous
اﺳﺘﻔﺎدﻩ ﻣﻲ ﮐﻨﺪ و ﺁدرس emailﮐﺎرﺑﺮ ﺑﻌﻨﻮان passowrdاﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد .
اﺳﺘﻔﺎدﻩ از ﻣﺘﺪ : OpenURLﻣﺘﺪ OpenURLﺳﺎدﻩ ﺗﺮﻳﻦ راﻩ اﻧﺠﺎم ﻋﻤﻠﻴﺎت FTPاﺳﺖ .دﺳﺘﻮر زﻳﺮ از ﻳﮏ ﺳﺎﻳﺖ FTPﻟﻴﺴﺖ
ﻣﻲ ﮔﻴﺮد :
Text.text=Inet.OpenURL("ftp://ftp.microsoft.com",icString)x
ﺑﺮاي ﺧﻮاﻧﺪن ﻓﺎﻳﻞ از ﻳﮏ ﺳﺎﻳﺖ FTPﺑﺎﻳﺪ در ﺣﺎﻟﺖ ﺑﺎﻳﻨﺮي ﮐﺎر ﮐﺮد :
b()=Inet.OpenURL("ftp://ftp.microsft.com/test.zip",icByteArray)x
اﺳﺘﻔﺎدﻩ از ﻣﺘﺪ : Executeﻣﺘﺪ Executeﻗﺎﺑﻠﻴﺘﻬﺎي ﺑﻴﺸﺘﺮي دارد و اﺟﺮای ﺁن در FTPﻧﻴﺎز ﺑﻪ دو ﭘﺎراﻣﺘﺮ دارد :
Inet.Execute(url,operation)x
ﮐﻪ urlﺁدرس ﺳﺎﻳﺖ FTPﺑﻬﻤﺮاﻩ ﻧﺎم و ﻣﺴﻴﺮ ﻓﺎﻳﻞ و ﭘﺎراﻣﺘﺮ operationﻳﮏ ﻓﺮﻣﺎن FTPاﺳﺖ .ﮐﻨﺘﺮل ITﺑﺎ دادﻩ هﺎي ﺧﻮاﻧﺪﻩ
ﺷﺪﻩ FTPﺑﻪ دو ﻃﺮﻳﻖ رﻓﺘﺎر ﻣﻲ ﮐﻨﺪ :
ﺑﺮﺧﻲ از دادﻩ هﺎ ﻣﺜﻞ ﭘﺎﺳﺦ ﻓﺮﻣﺎن DIRدر ﺑﺎﻓﺮ ﮐﻨﺘﺮل ITﻗﺮار ﻣﻲ ﮔﻴﺮد و ﺑﺎﻳﺪ ﺁﻧﻬﺎ را ﺑﺎ ﻣﺘﺪ GetChunkﺧﻮاﻧﺪ .
ﺑﺮﺧﻲ دﻳﮕﺮ از دادﻩ هﺎ ﻣﺜﻞ ﻓﺎﻳﻞ ﺧﻮاﻧﺪﻩ ﺷﺪﻩ ﺑﺎ ﻓﺮﻣﺎن GETﻣﺴﺘﻘﻴﻤﺎً روي دﻳﺴﮏ ﻧﻮﺷﺘﻪ ﻣﻲ ﺷﻮﻧﺪ و دﻳﮕﺮ ﻧﻴﺎزي ﺑﻪ
اﺳﺘﻔﺎدﻩ از ﻣﺘﺪ GetChunkﻧﻴﺴﺖ .
ﻓﺮاﻣﻴﻦ FTPﺑﺴﻴﺎر ﻗﻮي هﺴﺘﻨﺪ و ﺣﺘﻲ ﺑﻪ ﺷﻤﺎ اﻳﻦ اﻣﮑﺎن را ﻣﻲ دهﻨﺪ ﮐﻪ ﻓﺎﻳﻠﻬﺎ را ﺑﻪ روي ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ ﮐﭙﻲ ﮐﻨﻴﺪ ،ﺑﻪ
ﭘﻮﺷﻪ هﺎي ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ ﺑﺮوﻳﺪ ،ﻓﺎﻳﻠﻬﺎ را ﺣﺬف ﮐﻨﻴﺪ و ﻳﺎ ﺗﻐﻴﻴﺮ ﻧﺎم دهﻴﺪ .اﻟﺒﺘﻪ ﺑﺎﻳﺪ ﺗﻮﺟﻪ داﺷﺖ ﮐﻪ ﻓﺮاﻣﻴﻦ ﻗﺎﺑﻞ اﺟﺮا ﺑﻪ
ﻧﻮع ورود ﺑﻪ ﺳﻴﺴﺘﻢ FTPﺑﺴﺘﮕﻲ دارد .اﮔﺮ ﺑﺎ ﮐﺎرﺑﺮ anonymousﺑﻪ ﻳﮏ ﺳﺎﻳﺖ FTPوارد ﺷﻮﻳﺪ ﺗﻨﻬﺎ ﻣﻲ ﺗﻮاﻧﺪ ﻓﺎﻳﻠﻬﺎ را
ﺑﺒﻴﻨﺪ و ﺁﻧﻬﺎ را downloadﮐﻨﻴﺪ .
ﻣﻬﻤﺘﺮﻳﻦ ﻓﺮاﻣﻴﻦ FTPﻋﺒﺎرﺗﻨﺪ از :
: CD pathﺑﻪ داﻳﺮﮐﺘﻮري pathﻣﻲ روﻳﺪ .
: CDUPﺑﻪ ﻳﮏ داﻳﺮﮐﺘﻮري ﺑﺎﻻﺗﺮ ﻣﻲ رود .
: CLOSEﺑﺴﺘﻦ اﺗﺼﺎل FTP
: DELETE file1ﺣﺬف ﻓﺎﻳﻞ file1
: DIR file1ﺟﺴﺘﺠﻮي ﻓﺎﻳﻞ file1روي داﻳﺮﮐﺘﻮري ﺟﺎري
: MKDIR pathاﻳﺠﺎد ﻳﮏ داﻳﺮﮐﺘﻮري ﺑﺎ ﻧﺎم path
: PUT file1 file2ﻓﺎﻳﻞ file1را از ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﺒﺪا روي ﻓﺎﻳﻞ file2در ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ ﮐﭙﻲ ﻣﻲ ﮐﻨﺪ .
: PWDﻧﺎم داﻳﺮﮐﺘﻮري ﺟﺎري در ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ را ﺑﺮﻣﻲ ﮔﺮداﻧﺪ .
: QUITﻗﻄﻊ اﺗﺼﺎل FTP
: GET file1 file2ﻓﺎﻳﻞ file1را از ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ روي ﻓﺎﻳﻞ file2در ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﺒﺪا ﮐﭙﻲ ﻣﻲ ﮐﻨﺪ .
: file2 RENAME file1ﺗﻐﻴﻴﺮ ﻧﺎم ﻓﺎﻳﻞ file1ﺑﻪ file2
: RMDIR pathﺣﺬف داﻳﺮﮐﺘﻮري pathدر ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺼﺪ
: SIZE file1ﺑﺪﺳﺖ ﺁوردن ﺗﻌﺪاد ﺑﺎﻳﺘﻬﺎي ﻓﺎﻳﻞ ﻳﺎ داﻳﺮﮐﺘﻮري file1
ﻣﺜﺎل :
test.zip")x Inet.Execute("ftp://ftp.microsoft.com","GET
ﮐﻨﺘﺮل - WinSockﻗﺴﻤﺖ اول
ﻣﻘﺪﻣﻪ :
ﮐﻨﺘﺮل WinSockﻧﺴﺒﺖ ﺑﻪ ﺗﻤﺎم ﮐﻨﺘﺮﻟﻬﺎي اﻳﻨﺘﺮﻧﺖ در ﺳﻄﺢ ﭘﺎﻳﻴﻨﺘﺮي ﻗﺮار دارد .اﻳﻦ ﮐﻨﺘﺮل اﻣﮑﺎن اﻳﺠﺎد ﺳﺮوﻳﺴﻬﺎي ﺷﺒﮑﻪ
اي ﻣﺒﺘﻨﻲ ﺑﺮ ﭘﺮوﺗﮑﻠﻬﺎي TCPو UDPرا ﻣﻬﻴﺎ ﻣﻲ ﮐﻨﺪ .ﺑﻌﺒﺎرت دﻳﮕﺮ ﺗﻮﺳﻂ اﻳﻦ ﮐﻨﺘﺮل ﻣﻲ ﺗﻮان ﺑﺮﻧﺎﻣﻪ هﺎي ﮐﺎرﺑﺮدي
) Client/Serverﺳﺮوﻳﺲ ﮔﻴﺮﻧﺪﻩ /ﺳﺮوﻳﺲ دهﻨﺪﻩ ( اﻳﺠﺎد و ﺑﺎ اﺳﺘﻔﺎدﻩ از ﭘﺮوﺗﮑﻞ TCPو ﻳﺎ UDPﺑﻴﻦ ﺁﻧﻬﺎ ارﺗﺒﺎط ﺑﺮﻗﺮار ﻧﻤﻮد
.
ﺑﺎ ﺗﻨﻈﻴﻢ ﺧﺼﻮﺻﻴﺎت و ﻓﺮاﺧﻮاﻧﻲ ﻣﺘﺪهﺎي اﻳﻦ ﮐﻨﺘﺮل ﻣﻲ ﺗﻮاﻧﻴﺪ ﺑﻪ راﺣﺘﻲ ﺑﻪ ﻳﮏ ﮐﺎﻣﭙﻴﻮﺗﺮ راﻩ دور ﻣﺘﺼﻞ ﺷﻮﻳﺪ و دادﻩ هﺎ را
در هﺮ دو ﺟﻬﺖ ﺟﺎﺑﺠﺎ ﻧﻤﺎﺋﻴﺪ .ﻧﻤﻮﻧﻪ ﮐﺎرﺑﺮهﺎﻳﻲ ﮐﻪ ﻣﻲ ﺗﻮان ﺑﺎ اﻳﻦ ﮐﻨﺘﺮل اﻳﺠﺎد ﻧﻤﻮد :
، Port Scanner ،Game Network ،Proxy Server ،Mail server ،Mail client ،Client-server chatﭘﻴﺎدﻩ ﺳﺎزي
اﻟﮕﻮرﻳﺘﻢ هﺎي ﻣﻮازي و …
ﻣﺒﺎﻧﻲ : TCP
ﭘﺮوﺗﮑﻞ ﮐﻨﺘﺮل اﻳﻨﺘﺮﻧﺖ ) ( Transfer Control Protocolاﺟﺎزﻩ ﻣﻲ دهﺪ ﻳﮏ اﺗﺼﺎل ) ( Connectionرا از ﻃﺮﻳﻖ ﺳﻮﮐﺖ )
( socketﺑﻪ ﻳﮏ ﮐﺎﻣﭙﻴﻮﺗﺮ راﻩ دور ) ( Computer Remoteﺳﺎﺧﺘﻪ و اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ .ﺑﺎ اﺳﺘﻔﺎدﻩ از اﻳﻦ اﺗﺼﺎل ،هﺮ دو
ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻲ ﺗﻮاﻧﻨﺪ دادﻩ هﺎ را ﺑﻴﻦ ﺧﻮدﺷﺎن اﻧﺘﻘﺎل دهﻨﺪ .ﺑﺮﻗﺮاري ارﺗﺒﺎط از ﻃﺮﻳﻖ TCPهﻤﺎﻧﻨﺪ ﺻﺤﺒﺖ ﮐﺮدن ﺑﺎ ﺗﻠﻔﻦ اﺳﺖ
ﮐﻪ ﺑﺎﻳﺪ ﺣﺘﻤﺎً اﺗﺼﺎﻟﻲ ﺑﻴﻦ دو ﮐﺎﻣﭙﻴﻮﺗﺮ ﺻﻮرت ﮔﻴﺮد ﺗﺎ ﺑﺘﻮاﻧﻨﺪ ﺑﺎ هﻢ ارﺗﺒﺎط ﺑﺮﻗﺮار ﮐﻨﻨﺪ .
اﮔﺮ ﻳﮏ ﺑﺮﻧﺎﻣﻪ Clientﻣﻲ ﺳﺎزﻳﺪ ﺑﺎﻳﺴﺘﻲ ﺑﺪاﻧﻴﺪ ﮐﻪ ﻧﺎم ﻳﺎ ﺁدرس IPﮐﺎﻣﭙﻴﻮﺗﺮ Serverﭼﻴﺴﺖ ) ( Remote Host IPو
هﻤﭽﻨﻴﻦ از ﻃﺮﻳﻖ ﭼﻪ ﭘﻮرﺗﻲ ﻣﻲ ﺗﻮاﻧﻴﺪ ﺑﻪ ﺁن ﻣﺘﺼﻞ ﺷﻮﻳﺪ ) . ( Remote Portﺣﺎل ﺑﺎﻳﺴﺘﻲ ﺑﻪ ﺁن ﭘﻮرت Connectﮐﻨﻴﺪ .
هﻤﭽﻨﻴﻦ اﮔﺮ ﻳﮏ ﺑﺮﻧﺎﻣﻪ Serverﻣﻲ ﺳﺎزﻳﺪ ﺑﺎﻳﺴﺘﻲ ﭘﻮرﺗﻲ را ﮐﻪ روي ﺁن ﺑﻪ درﺧﻮاﺳﺘﻬﺎ ﮔﻮش ﻣﻲ دهﻴﺪ ﻣﺸﺨﺺ ﮐﻨﻴﺪ )
( LocalPortو ﺳﭙﺲ ﺑﻪ ﭘﻮرت ﮔﻮش دهﻴﺪ ) . ( Listen
زﻣﺎﻧﻴﮑﻪ ﻳﮏ ﮐﺎﻣﭙﻴﻮﺗﺮ Clientﺗﻘﺎﺿﺎي ﻳﮏ اﺗﺼﺎل را ﻣﻲ دهﺪ Serverاﻳﻦ درﺧﻮاﺳﺖ را Acceptﻣﻲ ﮐﻨﺪ .
زﻣﺎﻧﻴﮑﻪ ﻳﮏ اﺗﺼﺎل ﺳﺎﺧﺘﻪ ﻣﻲ ﺷﻮد ،هﺮ دو ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻲ ﺗﻮاﻧﻨﺪ دادﻩ را ﻓﺮﺳﺘﺎدﻩ و درﻳﺎﻓﺖ ﮐﻨﻨﺪ .
ﻣﺒﺎﻧﻲ : UDP
ﭘﺮوﺗﮑﻞ دﻳﺘﺎﮔﺮام ﮐﺎرﺑﺮ ) ( User Datagram Protocolﭘﺮوﺗﮑﻠﻲ ﺑﺪون اﺗﺼﺎل ) ( Connectionlessاﺳﺖ .ﺑﺮﺧﻼف ، TCP
ﮐﺎﻣﭙﻴﻮﺗﺮهﺎ ﻧﻴﺎز ﺑﻪ ﺑﺮﭘﺎ ﮐﺮدن ﻳﮏ اﺗﺼﺎل ﻧﺪارﻧﺪ ﺑﻨﺎﺑﺮاﻳﻦ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﻣﻲ ﺗﻮاﻧﺪ ﻳﮏ clientو ﻳﺎ ﻳﮏ serverﺑﺎﺷﺪ .ﺑﺮﻗﺮاري ارﺗﺒﺎط
در UDPﺷﺒﻴﻪ ارﺳﺎل ﻧﺎﻣﻪ از ﻃﺮﻳﻖ ﭘﺴﺖ اﺳﺖ .
ﺑﺮاي اﻧﺘﻘﺎل دادﻩ ﺗﻮﺳﻂ UDPاﺑﺘﺪا ﺑﺎﻳﺪ Local Portﮐﺎﻣﭙﻴﻮﺗﺮ Clientﺗﻨﻈﻴﻢ ﮔﺮدد .ﮐﺎﻣﭙﻴﻮﺗﺮ Serverﺗﻨﻬﺎ ﺑﺎﻳﺴﺘﻲ
RemoteHostرا ﺑﺮاﺑﺮ ﺁدرس ﮐﺎﻣﭙﻴﻮﺗﺮ Clientﻗﺮار دهﺪ و هﻤﭽﻨﻴﻦ Remote Portرا هﻤﺎن Local Portﮐﺎﻣﭙﻴﻮﺗﺮ Clientﻗﺮار
دهﺪ .ﺳﭙﺲ دو ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻲ ﺗﻮاﻧﻨﺪ دادﻩ هﺎ را ﺑﻴﻦ ﺧﻮد ﺟﺎﺑﺠﺎ ﮐﻨﻨﺪ .
اﺳﺘﻔﺎدﻩ از ﮐﻨﺘﺮل : WinSock
– 1اﻧﺘﺨﺎب ﭘﺮوﺗﮑﻞ :در زﻣﺎن اﺳﺘﻔﺎدﻩ از ﮐﻨﺘﺮل WinSockاوﻟﻴﻦ ﮐﺎري ﮐﻪ ﺑﺎﻳﺪ اﻧﺠﺎم دهﻴﺪ اﻧﺘﺨﺎب ﻳﮑﻲ از ﭘﺮوﺗﮑﻠﻬﺎي TCPﻳﺎ
UDPاﺳﺖ .ﻃﺒﻴﻌﺖ ﺑﺮﻧﺎﻣﻪ اي ﮐﻪ ﺷﻤﺎ ﻣﻲ ﺳﺎزﻳﺪ ﻧﻮع ﭘﺮوﺗﮑﻠﻲ را ﮐﻪ ﺑﺎﻳﺪ اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ ﻣﺸﺨﺺ ﻣﻲ ﮐﻨﺪ .ﭼﻨﺪ ﺳﻮال زﻳﺮ
ﺑﻪ ﺷﻤﺎ ﮐﻤﮏ ﻣﻲ ﮐﻨﺪ ﮐﻪ ﭘﺮوﺗﮑﻞ ﻣﻮرد ﻧﻴﺎزﺗﺎن را اﻧﺘﺨﺎب ﮐﻨﻴﺪ :
-ﺁﻳﺎ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ در زﻣﺎﻧﻴﮑﻪ دادﻩ ﻓﺮﺳﺘﺎدﻩ ﻣﻲ ﺷﻮد ﻳﺎ درﻳﺎﻓﺖ ﻣﻲ ﺷﻮد ﻧﻴﺎز ﺑﻪ اﻃﻼﻋﺎﺗﻲ از ﻃﺮف Serverﻳﺎ Clientدارد ؟
اﮔﺮ ﭼﻨﻴﻦ اﺳﺖ ﺑﺎﻳﺴﺘﻲ ﻳﮏ اﺗﺼﺎل TCPﻗﺒﻞ از ارﺳﺎل ﻳﺎ درﻳﺎﻓﺖ دادﻩ اﻳﺠﺎد ﺷﻮد .
-ﺁﻳﺎ دادﻩ ﺑﺴﻴﺎر ﺑﺰرگ اﺳﺖ ) ﻣﺜﻞ ﺗﺼﻮﻳﺮ ﻳﺎ ﻓﺎﻳﻠﻬﺎي ﺻﻮﺗﻲ ( ؟ زﻣﺎﻧﻴﮑﻪ ﻳﮏ اﺗﺼﺎل TCPﺳﺎﺧﺘﻪ ﻣﻲ ﺷﻮد ﭘﺮوﺗﮑﻞ TCPاﺗﺼﺎل
را ﺑﺎﻗﻲ ﻧﮕﻪ ﻣﻲ دارد و درﺳﺘﻲ ارﺳﺎل دادﻩ ﺗﻀﻤﻴﻦ ﺷﺪﻩ اﺳﺖ .اﻳﻦ اﺗﺼﺎل در هﺮ ﺣﺎل ﺑﻪ ﻣﻨﺎﺑﻊ ﻣﺤﺎﺳﺒﺎﺗﻲ ﺑﻴﺸﺘﺮي ﻧﻴﺎز
دارد و ﺑﻨﺎﺑﺮاﻳﻦ ﭘﺮهﺰﻳﻨﻪ ﺗﺮ اﺳﺖ .
-ﺁﻳﺎ دادﻩ ﻣﺘﻨﺎوب ارﺳﺎل ﻣﻲ ﺷﻮد ﻳﺎ در ﻳﮏ ﻧﺸﺴﺖ ) ( Sessionارﺳﺎل ﺧﻮاهﺪ ﺷﺪ ؟ ﺑﺮاي ﻣﺜﺎل اﮔﺮ ﺷﻤﺎ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﻣﻲ
ﺳﺎزﻳﺪ ﮐﻪ ﮐﺎﻣﭙﺘﺮهﺎي ﻣﺸﺨﺼﻲ را در ﻳﮏ زﻣﺎن ﺧﺎص از اﻧﺠﺎم ﺷﺪن ﻋﻤﻠﻴﺎﺗﻲ ﻣﻄﻠﻊ ﻣﻲ ﮐﻨﺪ ﭘﺮوﺗﮑﻞ UDPﻣﻨﺎﺳﺐ ﺗﺮ اﺳﺖ .
ﭘﺮوﺗﮑﻞ UDPهﻤﭽﻨﻴﻦ ﺑﺮاي ارﺳﺎل ﻣﻘﺎدﻳﺮ ﮐﻮﭼﮏ دادﻩ اي ﻣﻨﺎﺳﺖ ﺗﺮ ﻣﻲ ﺑﺎﺷﺪ .
– 2ﺗﻨﻈﻴﻢ ﭘﺮوﺗﮑﻞ :ﺑﺮاي ﺗﻨﻈﻴﻢ ﭘﺮوﺗﮑﻠﻲ ﮐﻪ ﻣﻲ ﺧﻮاهﻴﺪ در ﺑﺮﻧﺎﻣﻪ ﺗﺎن از ﺁن اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ در زﻣﺎن ﻃﺮاﺣﻲ ﺑﺮﻧﺎﻣﻪ ﺧﺎﺻﻴﺖ
Protocolﮐﻨﺘﺮل WinSockرا ﺑﺮاﺑﺮ sckTCPProtocolو ﻳﺎ sckUDPProtocolﻗﺮار دهﻴﺪ .هﻤﭽﻨﻴﻦ ﻣﻲ ﺗﻮاﻧﻴﺪ ﭘﺮوﺗﮑﻞ ﺧﻮد را
ﺗﻮﺳﻂ ﮐﺪ زﻳﺮ ﺗﻨﻈﻴﻢ ﮐﻨﻴﺪ :
WinSock.Protocol=sckTCPProtocol
– 3ﻣﺸﺨﺺ ﮐﺮدن ﻧﺎم ﮐﺎﻣﭙﻴﻮﺗﺎن :ﺑﺮاي اﺗﺼﺎل ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ راﻩ دور ﺑﺎﻳﺴﺘﻲ ﺁدرس IPو ﻳﺎ ﻧﺎم ﮐﺎﻣﭙﻮﺗﺮ را ﺑﺪاﻧﻴﺪ .
ﻧﺎم ﮐﺎﻣﭙﻴﻮﺗﺮ در Control Panel/Network/Identificationﻣﻮﺟﻮد اﺳﺖ .در ﺻﻮرﺗﻴﮑﻪ ﻣﻲ ﺧﻮاهﻴﺪ دو ﺑﺮﻧﺎﻣﻪ Clientو Server
ﺧﻮد را روي ﻳﮏ ﮐﺎﻣﭙﻴﻮﺗﺮ ﺗﺴﺖ ﮐﻨﻴﺪ از ﺁدرس IP 127.0.0.1ﺑﺮاي هﺮ دو اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ اﻣﺎ اﮔﺮ دو ﺑﺮﻧﺎﻣﻪ را روي دو ﮐﺎﻣﭙﻴﻮﺗﺮ
ﻣﺠﺰا در ﺷﺒﮑﻪ ﻗﺮار دادﻩ اﻳﺪ ﺑﺎ اﺟﺮاي دﺳﺘﻮر ipconfigدر DOS Promptﻣﻲ ﺗﻮاﻧﻴﺪ ﺁدرس IPﮐﺎﻣﭙﻴﻮﺗﺮ هﺎ را ﺑﺪﺳﺖ ﺁورﻳﺪ .
– 4اﻳﺠﺎد اﺗﺼﺎل : TCPدر زﻣﺎن ﺳﺎﺧﺖ ﺑﺮﻧﺎﻣﻪ اي ﮐﻪ از ﭘﺮوﺗﮑﻞ TCPاﺳﺘﻔﺎدﻩ ﻣﻲ ﮐﻨﺪ اﺑﺘﺪا ﺑﺎﻳﺪ ﺗﺼﻤﻴﻢ ﺑﮕﻴﺮﻳﺪ ﮐﻪ اﻳﻦ
ﺑﺮﻧﺎﻣﻪ Clientاﺳﺖ ﻳﺎ . Serverﺑﺮاي ﺳﺎﺧﺖ ﻳﮏ ﺑﺮﻧﺎﻣﻪ Serverﺑﺎﻳﺴﺘﻲ روي ﻳﮏ ﭘﻮرت ﺧﺎص Listenﮐﻨﻴﺪ .زﻣﺎﻧﻴﮑﻪ Client
ﺗﻘﺎﺿﺎي ﻳﮏ اﺗﺼﺎل را ﻣﻲ دهﺪ ،ﺑﺮﻧﺎﻣﻪ Serverﻣﻲ ﺗﻮاﻧﺪ ﺁﻧﺮا Acceptﮐﻨﺪ و ﺑﻨﺎﺑﺮاﻳﻦ اﺗﺼﺎل ﮐﺎﻣﻞ ﺷﺪﻩ اﺳﺖ .ﺣﺎل Clientو
Serverﻣﻲ ﺗﻮاﻧﻨﺪ ﺑﺎ هﻢ ارﺗﺒﺎط داﺷﺘﻪ ﺑﺎﺷﻨﺪ .
ﻣﺮاﺣﻞ زﻳﺮ ﺳﺎﺧﺖ ﻳﮏ ﺳﺮور ﭼﺖ ﺳﺎدﻩ ﺑﺮ ﻣﺒﻨﺎي TCPرا ﻧﺸﺎن ﻣﻲ دهﺪ :
-از ﻣﻨﻮي Projectﮔﺰﻳﻨﻪ Componentsرا اﻧﺘﺨﺎب ﮐﻨﻴﺪ و در ﻟﻴﺴﺖ Componentهﺎ ﻣﻮرد Microsoft WinSock 6.0را
اﻧﺘﺨﺎب ﮐﻨﻴﺪ .
-ﻳﮏ ﮐﻨﺘﺮل WinSockدر ﻓﺮم ﺧﻮد ﻗﺮار دهﻴﺪ و ﻧﺎم ﺁﻧﺮا tcpserverﺑﮕﺬارﻳﺪ
-دو textboxﺑﺎ ﻧﺎﻣﻬﺎي txtSendDataو txtReceiveDataو ﻧﻴﺰ ﻳﮏ دﮐﻤﻪ در ﻓﺮم ﻗﺮار دهﻴﺪ .
-ﮐﺪ زﻳﺮ را در روﻳﺪاد Form_Loadﺑﻨﻮﻳﺴﻴﺪ :
Tcpserver.LocalPort=1000
tcpserver.Listen
-زﻣﺎﻧﻴﮑﻪ درﺧﻮاﺳﺘﻲ از ﻃﺮف Clientﻣﻲ ﺁﻳﺪ روﻳﺪاد ConnectionRequestاﺟﺮا ﻣﻲ ﺷﻮد .در اﻳﻦ روﻳﺪاد اﺑﺘﺪا ﺑﺎﻳﺪ ﭼﮏ ﮐﻨﻴﺪ
ﮐﻪ ﺣﺎﻟﺖ ﮐﻨﺘﺮل ﺑﺴﺘﻪ ﺑﺎﺷﺪ .اﮔﺮ ﭼﻨﻴﻦ ﻧﻴﺴﺖ اﺗﺼﺎل را ﻗﺒﻞ از ﭘﺬﻳﺮﻓﺘﻦ اﺗﺼﺎل ﺟﺪﻳﺪ ﺑﺒﻨﺪﻳﺪ .ﺳﭙﺲ ﺗﻘﺎﺿﺎ را ﺑﺮ اﺳﺎس
ﭘﺎراﻣﺘﺮ requestIDﻣﻲ ﭘﺬﻳﺮﻳﻢ :
-ﺣﺎل اﺗﺼﺎل ﺑﻴﻦ Clientو Serverﺑﺮﻗﺮار ﺷﺪﻩ اﺳﺖ .ﮐﺪ زﻳﺮ را ﺑﺮاي eventﻣﺮﺑﻮط ﺑﻪ ﮐﻠﻴﮏ دﮐﻤﻪ Sendﺑﻨﻮﻳﺴﻴﺪ :
Tcpserver.SendData txtSendData.text
-اﮔﺮ دادﻩ اي از ﻃﺮف Clientﺑﻴﺎﻳﺪ روﻳﺪاد DataArrivalاﺟﺮا ﻣﻲ ﺷﻮد .ﮐﺪ زﻳﺮ را ﺑﺮاي اﻳﻦ روﻳﺪاد ﺑﻨﻮﻳﺴﻴﺪ :
Tcpserver.Close
tcpclient.RemoteHost=”yourservername”x
tcpclient.RemotePort=1000
tcpclient.Connect
tctclient.SendData txtsend.Text
Tcpclient.Close
ﮐﺪهﺎي ﻓﻮق ﻳﮏ ﺳﻴﺴﺘﻢ Client-Serverﺳﺎدﻩ را ﻧﺸﺎن ﻣﻲ دهﺪ .ﻓﺎﻳﻞ exeهﺮ دو ﺑﺮﻧﺎﻣﻪ را ﺑﺴﺎزﻳﺪ و ﺁﻧﻬﺎ را اﺟﺮا ﮐﻨﻴﺪ ﺗﺎ
ﺑﺘﻮاﻧﻴﺪ ﺳﻴﺴﺘﻢ ﺧﻮد را ﺗﺴﺖ ﮐﻨﻴﺪ .
– 5ﭘﺬﻳﺮﻓﺘﻦ ﺑﻴﺶ از ﻳﮏ ﺗﻘﺎﺿﺎي اﺗﺼﺎل Server :اي ﮐﻪ در ﺑﺎﻻ ﺳﺎﺧﺘﻪ ﺷﺪ ﺗﻨﻬﺎ ﻣﻲ ﺗﻮاﻧﺪ ﺗﻘﺎﺿﺎي ﻳﮏ اﺗﺼﺎل را ﺑﭙﺬﻳﺮد .ﺑﺎ
اﺳﺘﻔﺎدﻩ از اﻳﺠﺎد ﻳﮏ ﺁراﻳﻪ از ﮐﻨﺘﺮل WinSockﻣﻲ ﺗﻮان ﭼﻨﺪﻳﻦ ﺗﻘﺎﺿﺎي اﺗﺼﺎل را ﭘﺬﻳﺮﻓﺖ .ﺑﺮاي اﻳﻨﮑﺎر ﮐﺎﻓﻲ اﺳﺖ ﻳﮏ ﮐﭙﻲ )
( instanceاز ﮐﻨﺘﺮل ﺑﺴﺎزﻳﻢ ) ﺑﺎ ﺗﻨﻈﻴﻢ ﺧﺎﺻﻴﺖ ( Indexو ﻣﺘﺪ Acceptرا ﺑﺮاي instanceﺟﺪﻳﺪ ﺑﮑﺎر ﺑﺒﺮﻳﻢ .ﻓﺮض ﮐﻨﻴﺪ ﻳﮏ
ﮐﻨﺘﺮل WinSockﺑﺎ ﻧﺎم sckServerدر ﻓﺮم دارﻳﻢ ﮐﻪ ﺧﺎﺻﻴﺖ Indexﺁﻧﺮا ﺻﻔﺮ ﻗﺮار دادﻩ اﻳﻢ .هﻤﭽﻨﻴﻦ ﻳﮏ ﻣﺘﻐﻴﺮ intMaxاز
ﻧﻮع Longﺗﻌﺮﻳﻒ ﻣﻲ ﮐﻨﻴﻢ ﮐﻪ ﺗﻌﺪاد اﺗﺼﺎﻻت هﻤﺰﻣﺎن ﺑﻪ Serverرا ﻧﮕﻪ ﻣﻲ دارد .در eventﻣﺮﺑﻮط ﺑﻪ Form_Loadﮐﺪ زﻳﺮ را
ﺑﻨﻮﻳﺴﻴﺪ :
intMax=0
sckServer(0).LocalPort=1000
sckServer(0).Listen
هﺮ ﺑﺎر ﮐﻪ ﺗﻘﺎﺿﺎي ﻳﮏ اﺗﺼﺎل ﻣﻲ رﺳﺪ ﮐﺪ اﺑﺘﺪا ﺗﺴﺖ ﻣﻲ ﮐﻨﺪ ﮐﻪ ﻣﻘﺪار Indexﭼﻘﺪر اﺳﺖ .اﮔﺮ ﻣﻘﺪار Indexﺻﻔﺮ ﺑﺎﺷﺪ
ﻣﺘﻐﻴﺮ intMaxﻳﮑﻲ اﻓﺰاﻳﺶ ﻣﻲ ﻳﺎﺑﺪ و از intMaxﺑﺮاي ﺳﺎﺧﺖ ﻳﮏ instanceﺟﺪﻳﺪ از ﮐﻨﺘﺮل اﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد .ﺣﺎل از اﻳﻦ
instanceﺑﺮاي ﭘﺬﻳﺮﻓﺘﻦ ﺗﻘﺎﺿﺎي اﺗﺼﺎل اﺳﺘﻔﺎدﻩ ﻣﻲ ﮔﺮدد .ﺑﺮاي اﻳﻨﮑﺎر ﮐﺪ زﻳﺮ را ﺑﺮاي روﻳﺪاد ConnectionRequestﺑﻨﻮﻳﺴﻴﺪ
:
– 6اﻳﺠﺎد اﺗﺼﺎل : UDPﺳﺎﺧﺖ ﻳﮏ ﺑﺮﻧﺎﻣﻪ UDPﺳﺎدﻩ ﺗﺮ از ﺑﺮﻧﺎﻣﻪ هﺎي TCPاﺳﺖ زﻳﺮا ﭘﺮوﺗﮑﻞ UDPﺑﻪ اﺗﺼﺎل ﻧﻴﺎز ﻧﺪارد .در
ﺑﺮﻧﺎﻣﻪ TCPﺑﺎﻻ ﻳﮏ ﮐﻨﺘﺮل WinSockﺑﺎﻳﺴﺘﻲ ﺣﺘﻤﺎً Listenﻣﻲ ﮐﺮد و ﻳﮏ ﮐﻨﺘﺮل دﻳﮕﺮ ﻳﮏ اﺗﺼﺎل را ﺗﻮﺳﻂ ﻣﺘﺪ Connect
اﻳﺠﺎد ﻧﻤﻮد .در ﻋﻮض ﭘﺮوﺗﮑﻞ UDPﻧﻴﺎزي ﺑﻪ اﺗﺼﺎل ﻧﺪارد .ﺑﺮاي ارﺳﺎل دادﻩ ﺑﻴﻦ دو ﮐﻨﺘﺮل WinSockﺳﻪ ﻣﺮﺣﻠﻪ ﺑﺎﻳﺴﺘﻲ
اﻧﺠﺎم ﺷﻮد :
-ﭘﺎراﻣﺘﺮ RemoteHostﺑﺮاﺑﺮ ﻧﺎم ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺎﺑﻞ اﺳﺖ .
-ﭘﺎراﻣﺘﺮ RemotePortﺑﺮاﺑﺮ ﭘﺎراﻣﺘﺮ LocalPortﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻘﺎﺑﻞ
-اﺳﺘﻔﺎدﻩ از ﻣﺘﺪ Bindﺑﺮاي ﻣﺸﺨﺺ ﮐﺮدن LocalPort
ﭼﻮن هﺮ دو ﮐﺎﻣﭙﻴﻮﺗﺮ از ﻧﻈﺮ ارﺗﺒﺎط ﻣﺴﺎوي هﺴﺘﻨﺪ ،اﻳﻦ ﻧﻮع ﺑﺮﻧﺎﻣﻪ هﺎ را Peer-to-Peerﮔﻮﻳﻨﺪ .ﺑﺮاي ﻧﻤﻮﻧﻪ از ﮐﺪ زﻳﺮ ﺑﺮاي
ﺳﺎﺧﺖ ﻳﮏ ﺑﺮﻧﺎﻣﻪ chatاﺳﺘﻔﺎدﻩ ﻣﻲ ﮐﻨﻴﻢ :
-ﻳﮏ ﮐﻨﺘﺮل WinSockدر ﻓﺮم ﻗﺮار دهﻴﺪ و ﻧﺎم ﺁﻧﺮا udppeerAﺑﮕﺬارﻳﺪ .
-ﺧﺎﺻﻴﺖ Protocolﺁﻧﺮا UDPProtocolﻗﺮار دهﻴﺪ .
-دو textboxﺑﺎ ﻧﺎﻣﻬﺎي txtsendو txtreceiveو ﻧﻴﺰ ﻳﮏ دﮐﻤﻪ در ﻓﺮم ﻗﺮار دهﻴﺪ .
-ﮐﺪ زﻳﺮ را ﺑﺮاي ﻣﺘﺪ Form_Loadﺑﻨﻮﻳﺴﻴﺪ :
udppeerA.RemoteHost=”nameofpeerB”x
udppeerA.RemotePort=1001
1002 udppeerA.Bind
udppeerA.SendData txtsend.text
WinSock.GetData data[,type][,maxlen]x
ﮐﻪ dataدادﻩ درﻳﺎﻓﺘﻲ اﺳﺖ .اﮔﺮ دادﻩ ﮐﺎﻓﻲ ﻣﻮﺟﻮد ﻧﺒﺎﺷﺪ dataﺑﺮاﺑﺮ emptyﺧﻮاهﺪ ﺑﻮد .
typeﻧﻮع دادﻩ درﻳﺎﻓﺘﻲ اﺳﺖ ﮐﻪ ﻣﻲ ﺗﻮاﻧﺪ ﻣﻘﺎدﻳﺮ زﻳﺮ ﺑﺎﺷﺪ :
vbString - - vbInteger - vbLong - vbSingle - vbDouble - vbDate - vbBoolean - vbError - vbByte
vbArray+vbByte
maxlenﺣﺪاﮐﺜﺮ ﺳﺎﻳﺰ را در زﻣﺎن درﻳﺎﻓﺖ ﻳﮏ byte Arrayو ﻳﺎ ﻳﮏ stringﻣﺸﺨﺺ ﻣﻲ ﮐﻨﺪ .
ﻣﺘﺪ Getdataدر روﻳﺪاد Data Arrivalاﺳﺘﻔﺎدﻩ ﻣﻲ ﺷﻮد ﮐﻪ اﻳﻦ روﻳﺪاد ﻳﮏ ﭘﺎراﻣﺘﺮ ﺑﺎ ﻧﺎم TotalBytesدارد .اﮔﺮ maxlenاي
ﮐﻪ ﺷﻤﺎ ﺗﻌﻴﻴﻦ ﮐﺮدﻩ اﻳﺪ ﮐﻤﺘﺮ از TotalBytesﺑﺎﺷﺪ ﭘﻴﻐﺎم هﺸﺪار ﺷﻤﺎرﻩ ١٠٠۴٠درﻳﺎﻓﺖ ﻣﻲ ﮐﻨﻴﺪ ﺑﺪﻳﻦ ﻣﻌﻨﻲ ﮐﻪ ﺑﺎﻳﺘﻬﺎي
ﺑﺎﻗﻴﻤﺎﻧﺪﻩ ﮔﻢ ﺧﻮاهﻨﺪ ﺷﺪ .
ﻣﺘﺪ : Listenﻳﮏ ﺳﻮﮐﺖ ﻣﻲ ﺳﺎزد و ﺁﻧﺮا در ﺣﺎﻟﺖ Listenﻗﺮار ﻣﻲ دهﺪ .اﻳﻦ ﻣﺘﺪ ﺗﻨﻬﺎ در اﺗﺼﺎﻻت TCPﺑﮑﺎر ﻣﻴﺮود .
ﻣﺘﺪ : PeekDataﻣﺸﺎﺑﻪ GetDataاﺳﺖ ﺑﺎ اﻳﻦ ﺗﻔﺎوت ﮐﻪ دادﻩ را از ﺻﻒ ورودي ﺣﺬف ﻧﻤﻲ ﮐﻨﺪ .اﻳﻦ ﻣﺘﺪ ﺗﻨﻬﺎ ﺑﺮاي اﺗﺼﺎﻻت
TCPﺑﮑﺎر ﻣﻲ رود .
ﻣﺘﺪ : SendDataﺑﺮاي ارﺳﺎل دادﻩ ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ راﻩ دور ﺑﮑﺎر ﻣﻲ رود .
ﺑﺮرﺳﻲ eventهﺎي ﮐﻨﺘﺮل : WinSock
روﻳﺪاد : Closeزﻣﺎﻧﻲ رخ ﻣﻲ دهﺪ ﮐﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ راﻩ دور اﺗﺼﺎل را ﺑﺒﻨﺪد .
روﻳﺪاد : Connectﺑﻌﺪ از اﻳﻨﮑﻪ ﻳﮏ اﺗﺼﺎل ﺑﻪ Serverاﻳﺠﺎد ﺷﺪ روي ﻣﻲ دهﺪ .ﺷﮑﻞ ﮐﻠﻲ ﺁن ﺑﺼﻮرت زﻳﺮ اﺳﺖ :
ﮐﻪ ﭘﺎراﻣﺘﺮ ErrorOccurredدو ﻣﻘﺪار دارد :اﮔﺮ Trueﺑﺎﺷﺪ ﻳﻌﻨﻲ اﺗﺼﺎل Failﺷﺪﻩ اﺳﺖ و اﮔﺮ Falseﺑﺎﺷﺪ ﻳﻌﻨﻲ اﺗﺼﺎل ﺑﺎ
ﻣﻮﻓﻘﻴﺖ اﻧﺠﺎم ﺷﺪﻩ اﺳﺖ .
ﺑﺎ روﻳﺪاد Connectﻣﻲ ﺗﻮاﻧﻴﺪ errorهﺎﻳﻲ ﮐﻪ در زﻣﺎن ﻓﺮاﻳﻨﺪ ﺑﺎز ﮐﺮدن اﺗﺼﺎل ﺑﺮﮔﺮداﻧﺪﻩ ﺷﺪﻩ را ﭼﮏ ﮐﻨﻴﺪ .
روﻳﺪاد : ConnectionRequestزﻣﺎﻧﻲ رخ ﻣﻲ دهﺪ ﮐﻪ ﻳﮏ ﮐﺎﻣﭙﻴﻮﺗﺮ راﻩ دور ﺗﻘﺎﺿﺎي ﻳﮏ اﺗﺼﺎل را ﺑﺪهﺪ .اﻳﻦ روﻳﺪاد ﻓﻘﻂ ﺑﺮاي
ﺑﺮﻧﺎﻣﻪ هﺎي TCP Serverﺑﮑﺎر ﻣﻲ رود .
روﻳﺪاد : DataArrivalزﻣﺎﻧﻲ رخ ﻣﻲ دهﺪ ﮐﻪ دادﻩ ﺟﺪﻳﺪي ﺑﻴﺎﻳﺪ .
روﻳﺪاد : Errorزﻣﺎﻧﻲ رخ ﻣﻲ دهﺪ ﮐﻪ ﻳﮏ ﺧﻄﺎ در ﻓﺮاﻳﻨﺪ ارﺗﺒﺎط رخ دهﺪ ) ﻣﺜﻼً Failed to Connectو ﻳﺎ . ( Failed to Send
ﺷﮑﻞ ﮐﻠﻲ ﺁن ﺑﺼﻮرت زﻳﺮ اﺳﺖ :
ﮐﻪ bytesSentﺗﻌﺪاد ﺑﺎﻳﺘﻬﺎي ارﺳﺎل ﺷﺪﻩ و bytesRemainingﺗﻌﺪاد ﺑﺎﻳﺘﻬﺎي ﺑﺎﻗﻴﻤﺎﻧﺪﻩ اﺳﺖ .
TAPIدر وﻳﮋوال ﺑﻴﺴﻴﮏ -ﻣﻘﺪﻣﻪ
TAPIﭼﻴﺴﺖ ؟
TAPIﻳﺎ Telephony APIﻳﮏ ﮐﺘﺎﺑﺨﺎﻧﻪ اﺳﺘﺎﻧﺪارد ﺑﺮای ﮐﺎر ﺑﺎ ﻣﻮدم و ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ هﺎی ﺗﻠﻔﻨﯽ ﻣﯽ ﺑﺎﺷﺪ .ﺑﺮای ﻧﻤﻮﻧﻪ ﻣﯽ
ﺗﻮان از ﺑﺮﻧﺎﻣﻪ هﺎی ) Phone Dialerﺷﻤﺎرﻩ ﮔﻴﺮ ﺗﻠﻔﻦ ( ،ﺑﺮﻧﺎﻣﻪ ﺷﺒﮑﻪ ﺳﺎزی ﺗﻠﻔﻨﯽ ) ، ( Dialup Networkingﺑﺮﻧﺎﻣﻪ
ﺗﺸﺨﻴﺺ ﭘﺎﻟﺲ ﻣﻮدم ﺑﺮای ﺿﺒﻂ اﻃﻼﻋﺎت وارد ﺷﺪﻩ از ﻃﺮف ﮐﺎرﺑﺮان و ﮐﺎرﺑﺮدهﺎی دﻳﮕﺮ در اﻳﻦ زﻣﻴﻨﻪ ﻧﺎم ﺑﺮد .اﻳﻦ ﮐﺘﺎﺑﺨﺎﻧﻪ ﺑﻪ
ﺷﻤﺎ ﮐﻤﮏ ﮐﻤﮏ ﻣﯽ ﮐﻨﺪ ﺗﺎ ﺑﺪون درﮔﻴﺮ ﺷﺪن ﺑﺎ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﺳﺨﺖ اﻓﺰار ﻣﻮدم و دراﻳﻮر ﺁن ﺑﻄﻮر ﻣﺴﺘﻘﻴﻢ ﺑﺘﻮاﻧﻴﺪ ﺑﺮﻧﺎﻣﻪ
هﺎی ﮐﺎرﺑﺮدﯾﻲ در اﻳﻦ زﻣﻴﻨﻪ ﺑﻨﻮﻳﺴﻴﺪ .
Telephonyاﻣﮑﺎن ﻣﺠﺘﻤﻊ ﺳﺎزی ﮐﺎﻣﭙﻴﻮﺗﺮهﺎ ﺑﺎ دﺳﺘﮕﺎهﻬﺎی ارﺗﺒﺎﻃﯽ و ﺷﺒﮑﻪ هﺎ را ﻓﺮاهﻢ ﻧﻤﻮدﻩ اﺳﺖ .ﻣﻌﻤﻮﻻً دﺳﺘﮕﺎﻩ
ارﺗﺒﺎﻃﯽ ﻳﮏ ﻣﻮدم و ﺧﻂ ارﺗﺒﺎﻃﯽ ﻧﻴﺰ ﺷﺒﮑﻪ ) PSTNﺷﺒﮑﻪ ﻋﻤﻮﻣﯽ ﺗﻠﻔﻦ ﺳﻮﺋﻴﭽﻴﻨﮓ ( ﻣﯽ ﺑﺎﺷﺪ .ﺑﺮﺧﯽ از ﮐﺎرﺑﺮدهﺎی
Telephonyﻋﺒﺎرﺗﻨﺪ از :
ﺑﺮای ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ هﺎی ﮐﺎرﺑﺮدی ﺑﺎ اﺳﺘﻔﺎدﻩ از TAPIﺑﺎﻳﺴﺘﯽ اﺑﺘﺪا در ﻣﻮرد ﺳﻄﺢ ﺳﺮوﻳﺴﯽ ﮐﻪ ﻣﯽ ﺧﻮاهﻴﻢ اراﺋﻪ دهﻴﻢ
ﺗﺼﻤﻴﻢ ﮔﻴﺮی ﮐﻨﻴﻢ .ﺑﺮای ﻣﺜﺎل ﺑﺮای ﻧﻮﺷﺘﻦ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎرﻩ ﮔﻴﺮ ﺗﻠﻔﻦ ﻧﻴﺎز ﺑﻪ اﺳﺘﻔﺎدﻩ ﮐﺎﻣﻞ از TAPIﻧﻴﺴﺖ و ﻣﯽ ﺗﻮان
از ﻗﺎﺑﻠﻴﺘﻬﺎی ﺧﻮد وﻳﻨﺪوز در اﻳﻦ زﻣﻴﻨﻪ اﺳﺘﻔﺎدﻩ ﮐﺮد ) . ( Assisted Telephonyدر ﺑﺨﺸﻬﺎی ﺑﻌﺪی در ﻣﻮرد ﺳﻄﻮح ﻣﺨﺘﻠﻒ
ﺳﺮوﻳﺲ در TAPIﺑﻴﺸﺘﺮ ﺻﺤﺒﺖ ﺧﻮاهﻢ ﮐﺮد .
دوﻣﻴﻦ ﻣﻄﻠﺒﯽ ﮐﻪ ﺑﺎﻳﺪ ﻣﻮرد ﺗﻮﺟﻪ ﻗﺮار داد اﻳﻨﺴﺖ ﮐﻪ ﻣﯽ ﺧﻮاهﻴﻢ از TAPI 2.xاﺳﺘﻔﺎدﻩ ﮐﻨﻴﻢ ﻳﺎ از . TAPI 3.xﺗﻔﺎوت اﻳﻨﺪو
ﺁﻧﺴﺖ ﮐﻪ TAPIورژن ٢ﻳﮏ APIﺑﺮﻣﺒﻨﺎی Cاﺳﺖ در ﺣﺎﻟﻴﮑﻪ ورژن ٣ﺁن ﺑﺮ ﻣﺒﻨﺎی ﺗﮑﻨﻮﻟﻮژی COMﻣﯽ ﺑﺎﺷﺪ .در ﺑﺨﺸﻬﺎی
ﺑﻌﺪی ﻣﻄﺎﻟﺐ ﺑﻴﺸﺘﺮی در ﻣﻮرد ﺗﻔﺎوﺗﻬﺎی اﻳﻦ دو ﻧﺴﺨﻪ ﺑﻴﺎن ﺧﻮاهﻢ ﮐﺮد .
ﺑﺨﺸﻬﺎی اﺻﻠﯽ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﮐﺎﻣﻞ TAPIﻋﺒﺎرﺗﻨﺪ از :
: TAPI Initialization - ١ﺷﺎﻣﻞ loadﮐﺮدن ، TAPI dllاﺗﺼﺎل ﺑﻪ ، Server TAPIﻣﺬاﮐﺮﻩ در ﻣﻮرد ورژن TAPIو ﺑﺮﭘﺎﺳﺎزی
ﺳﻴﺴﺘﻢ اﻃﻼع رﺳﺎﻧﯽ eventﻣﯽ ﺑﺎﺷﺪ .
در ﺑﺨﺸﻬﺎی ﺑﻌﺪی در ﻣﻮرد هﺮ ﻳﮏ از اﻳﻦ ﻣﺮاﺣﻞ ﺑﻴﺸﺘﺮ ﺻﺤﺒﺖ ﺧﻮاهﻢ ﮐﺮد .
TAPIدر وﻳﮋوال ﺑﻴﺴﻴﮏ -ﺑﺨﺶ دوم
ﻋﻤﻠﮑﺮد درﺳﺖ اﺟﺰای TAPIﻧﻴﺎز ﺑﻪ ﺑﺮﭘﺎﺳﺎزی ﻣﺤﻴﻂ ارﺗﺒﺎﻃﯽ روی ﮐﺎﻣﭙﻴﻮﺗﺮ ﻣﻮرد ﻧﻈﺮ دارد .ﻣﺮاﺣﻞ اﻳﻦ اﻣﺮ ﻋﺒﺎرﺗﻨﺪ از :
- ١ﻧﺼﺐ : TAPIزﻣﺎﻧﻴﮑﻪ ﺳﺨﺖ اﻓﺰار و ﻳﺎ ﻧﺮم اﻓﺰار ﺑﺮای اوﻟﻴﻦ ﺑﺎر ﺑﻪ ﮐﺎﻣﭙﻴﻮﺗﺮ اﺿﺎﻓﻪ ﻣﯽ ﺷﻮد اﻧﺠﺎم ﻣﯽ ﮔﻴﺮد .ﺟﺰﺋﻴﺎت ﮐﺎر
ﺑﻪ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ و ﻧﺮم اﻓﺰار ﺑﺴﺘﮕﯽ دارد .
- ٣ﻣﺬاﮐﺮﻩ در ﻣﻮرد ورژن : TAPIﺑﺮای اﻃﻤﻴﻨﺎن از اﻳﻨﮑﻪ اﺟﺰای TAPIﻗﺎدر ﺑﻪ ﺗﺒﺎدل دادﻩ هﺎ ﺑﺎﺷﻨﺪ .
- ۴اﺳﺘﺨﺮاج اﻃﻼﻋﺎت ﻣﻨﺎﺑﻊ :ﺑﺪﺳﺖ ﺁوردن اﻃﻼﻋﺎﺗﯽ در ﻣﻮرد دﺳﺘﮕﺎهﯽ ﮐﻪ ﻣﯽ ﺗﻮان از ﺁن در ﺑﺮﻧﺎﻣﻪ TAPIﻣﻮرد ﻧﻈﺮﻣﺎن
اﺳﺘﻔﺎدﻩ ﻧﻤﻮد .
از ﻣﻨﻮی Projectﮔﺰﻳﻨﻪ Referencesرا اﻧﺘﺨﺎب ﮐﺮدﻩ و از ﻟﻴﺴﺖ ﻣﺮﺑﻮﻃﻪ ﻣﻮرد Microsoft TAPI 3.0 Type Libraryرا اﻧﺘﺨﺎب
ﮐﻨﻴﺪ .
ﺣﺎل وارد ﺑﺨﺶ ﮐﺪ ﻧﻮﻳﺴﯽ ﻓﺮﻣﺘﺎن ﺷﻮﻳﺪ و ﻣﺘﻐﻴﺮ objTAPIرا ﺑﺼﻮرت زﻳﺮ ﺗﻌﺮﻳﻒ ﮐﻨﻴﺪ :
ﺳﭙﺲ در ﺑﺨﺶ ﻣﺮﺑﻮط ﺑﻪ Load Formﺷﯽ objTAPIرا ﺑﺼﻮرت زﻳﺮ اﻳﺠﺎد ﻣﯽ ﮐﻨﻴﻢ :
هﻤﺎﻧﻄﻮر ﮐﻪ در ﺑﺨﺸﻬﺎی ﻗﺒﻠﯽ ﮔﻔﺘﻪ ﺷﺪ ،ﻗﺒﻞ از ﻓﺮاﺧﻮاﻧﯽ هﺮ ﺗﺎﺑﻊ TAPIاﺑﺘﺪا ﺑﺎﻳﺴﺘﯽ ﺁﻧﺮا ﻣﻘﺪاردهﯽ اوﻟﻴﻪ ﮐﻨﻴﻢ .ﺑﺮای
ﻣﻘﺪاردهﯽ اوﻟﻴﻪ ﮐﺮدن ﺷﯽ TAPIﻋﺒﺎرت زﻳﺮ را ﺑﻨﻮﻳﺴﻴﺪ :
Call objTapi.Initialize
ﺑﺨﺶ ﭼﻬﺎرم- در وﻳﮋوال ﺑﻴﺴﻴﮏTAPI
: اﻧﺘﺨﺎب ﻳﮏ ﺁدرس
در وﻳﮋوال ﺑﻴﺴﻴﮏ ﻣﻨﺎﺑﻊ ﺗﻠﻔﻨﯽ در دﺳﺘﺮس را ﺑﺮای ﻳﮏTAPI ﮐﺪ زﻳﺮ ﻧﺸﺎن ﻣﯽ دهﺪ ﮐﻪ ﭼﮕﻮﻧﻪ ﻣﯽ ﺗﻮان ﺑﺎ اﺳﺘﻔﺎدﻩ از ﺷﯽ
. ﺑﺮرﺳﯽ ﮐﺮد، ﺁدرس ﮐﻪ ﺑﺘﻮاﻧﺪ ﻳﮏ ﻣﺠﻤﻮﻋﻪ ﻣﺸﺨﺺ از ﻧﻴﺎزهﺎ را ﻣﺪﻳﺮﻳﺖ ﮐﻨﺪ
اﻧﺠﺎم، را ﮐﻪ در ﺑﺨﺶ ﻗﺒﻞ ررﺳﯽ ﺷﺪTAPI ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﮐﻪ ﻗﺒﻞ از اﻧﺠﺎم اﻳﻦ ﮐﺎر ﺑﺎﻳﺴﺘﯽ ﻋﻤﻞ ﻣﻘﺪاردهﯽ اوﻟﻴﻪ
. دهﻴﺪ
اﻧﺠﺎم ﻧﮕﺮﻓﺘﻪ اﺳﺖ و ﺑﺮای اﺳﺘﻔﺎدﻩ از ﮐﺪ زﻳﺮ در ﺑﺮﻧﺎﻣﻪ هﺎی واﻗﻌﯽ ﺑﺎﻳﺴﺘﯽ ﺑﺨﺶerror checking در ﮐﺪ زﻳﺮ ﻋﻤﻞ: ﻧﮑﺘﻪ
. ﺑﺮرﺳﯽ ﺧﻄﺎ را ﺑﻪ ﺁن اﺿﺎﻓﻪ ﮐﻨﻴﺪ
: ﺗﻌﺮﻳﻒ ﻳﮏ ﺷﯽ ﺁدرس و ﻳﮏ ﺷﯽ ﻣﺠﻤﻮﻋﻪ ﺁدرس- ١
bFound = False
objCollAddresses.Count For indexAddr = 1 To
objCollAddresses.Item(indexAddr)x = Set objCrtAddress
Set objMediaSupport = objCrtAddress
objAddressCapabilities = objCrtAddress Set
: ﻳﮏ ﺁدرس ﻗﺎﺑﻞ اﺳﺘﻔﺎدﻩ ﺧﻮاهﺪ ﺑﻮدgobjAddress در ﺻﻮرﺗﻴﮑﻪ ﺁدرس ﻣﻮرد ﻧﻈﺮ ﭘﻴﺪا ﺷﻮد ﺑﺮﻧﺎﻣﻪ از ﺣﻠﻘﻪ ﺧﺎرج ﺷﺪﻩ و
و رﺟﻴﺴﺘﺮ ﮐﺮدنevent ﺗﻨﻈﻴﻢ ﻓﻴﻠﺘﺮ، event رﺟﻴﺴﺘﺮ ﮐﺮدن واﺳﻂ، TAPI ﺳﺎدﻩ ﺑﺮایevent handler ﮐﺪ زﻳﺮ ﺷﺎﻣﻞ ﻳﮏ
هﺎ راevent ﮐﻪTAPI هﺪف اﺻﻠﯽ از اﻳﻦ ﮐﺪ اﻳﻨﺴﺖ ﮐﻪ ﻣﻄﻤﺌﻦ ﺷﻮﻳﻢ ﺑﺨﺸﯽ از. ﺗﻤﺎم ﻓﺮاﺧﻮاﻧﻴﻬﺎی دادن اﺧﻄﺎر اﺳﺖ
. درﻳﺎﻓﺖ ﻣﯽ ﮐﻨﺪ ﭘﺮدازﺷﯽ را ﻗﺒﻞ از اﻧﺘﻘﺎل ﺑﻪ ﺑﺨﺸﻬﺎی دﻳﮕﺮ اﻧﺠﺎم دهﺪ
: ﺗﻌﺎرﻳﻔﻬﺎ
TAPI3_CALL_EVENTS = objTapi.EventFilter
fOwner = True
fOwner = True
fMonitor = False
TAPIMEDIATYPE_AUDIO = lMediaTypes
lCallbackInstance = 1
,gobjTapi.RegisterCallNotifications(gobjAddress,fMonitor = glRegistrationToken
fOwner,lMediaTypes,lCallbackInstance)x
ﺑﺨﺶ ﺷﺸﻢ- در وﻳﮋوال ﺑﻴﺴﻴﮏTAPI
: اﻧﺘﺨﺎب ﻳﮏ ﺗﺮﻣﻴﻨﺎل
و ﻋﻤﻞ اﻧﺘﺨﺎب ﺁدرس را اﻧﺠﺎمTAPI Initialization ﻗﺒﻞ از اﻳﻨﮑﻪ ﻳﮏ ﺗﺮﻣﻴﻨﺎل را ﺑﺮای ﺑﺮﻗﺮاری ارﺗﺒﺎط اﻧﺘﺨﺎب ﮐﻨﻴﺪ ﺑﺎﻳﺴﺘﯽ+
. دادﻩ ﺑﺎﺷﻴﺪ
: ﻳﮏ ﺗﺮﻣﻴﻨﺎل را ﺑﺮای ﺁن اﺳﺘﺨﺮاج ﻣﯽ ﮐﻨﻴﻢobjTerminalSupport ﺳﭙﺲ ﻣﺘﻐﻴﺮ ﺗﺮﻣﻴﻨﺎل را ﺗﻌﺮﻳﻒ ﮐﺮدﻩ و ﺗﻮﺳﻂ ﺷﯽ
: ﻧﻴﺴﺖ ﺑﻨﺎﺑﺮاﻳﻦ ﺁﻧﺮا ﺁزاد ﻣﯽ ﮐﻨﻴﻢobjTerminalSupport در اﻳﻨﺠﺎ دﻳﮕﺮ ﻧﻴﺎزی ﺑﻪ ﺷﯽ
for اﻣﮑﺎن اﻳﺠﺎد ﺗﺮﻣﻴﻨﺎل در ﻳﮏ ﺣﻠﻘﻪITCollection ﺑﻪ ازای اﺳﺘﺮﻳﻢ هﺎی ﻣﻮﺟﻮد در، در ﺻﻮرﺗﻴﮑﻪ اﻳﻦ ﺷﯽ اﻳﺠﺎد ﺷﻮد
: ﺑﺮرﺳﯽ ﻣﯽ ﺷﻮد و ﺗﺮﻣﻴﻨﺎل ﻣﻨﺎﺳﺐ اﻧﺘﺨﺎب ﻣﯽ ﮔﺮدد
: ﺳﭙﺲ در اﻳﻨﺠﺎ ﺑﺎﻳﺴﺘﯽ ﮐﺪی ﮐﻪ در ﺑﺨﺶ اول اﻳﻦ درس ﺑﺮای اﻧﺘﺨﺎب ﺗﺮﻣﻴﻨﺎل ﻧﻮﺷﺘﻪ ﺷﺪ ﺁوردﻩ ﺷﻮد
{
Select Terminal Code
}
gobjCall.Connect (False)x
: درﻳﺎﻓﺖ ﻳﮏ ﺗﻤﺎس
ﺑﺎﻳﺴﺘﯽ ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﮐﻪ. ﮐﺪ زﻳﺮ ﺑﺮای ﻳﺎﻓﺘﻦ و ﻳﺎ اﻳﺠﺎد ﻳﮏ ﺗﺮﻣﻴﻨﺎل ﻣﻨﺎﺳﺐ ﺑﺮای درﻳﺎﻓﺖ ﻳﮏ ﺗﻤﺎس ﺑﮑﺎر ﻣﯽ رود
. هﺎ را اﻧﺠﺎم دهﻴﺪevent اﻧﺘﺨﺎب ﻳﮏ ﺁدرس و رﺟﻴﺴﺮ ﮐﺮدن، ﻗﺒﻞ از اﺟﺮای ﮐﺪ زﻳﺮ ﺑﺎﻳﺴﺘﯽ ﻣﺮاﺣﻞ ﻣﻘﺪاردهﯽ اوﻟﻴﻪ
ﻳﮏpEvent ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﮐﻪ در ﮐﺪ زﻳﺮ ﻣﺘﻐﻴﺮ. هﻤﭽﻨﻴﻦ در ﮐﺪ زﻳﺮ ﺑﺎﻳﺴﺘﯽ ﻣﺮﺣﻠﻪ اﻧﺘﺨﺎب ﺗﺮﻣﻴﻨﺎل را ﻧﻴﺰ اﻧﺠﺎم دهﻴﺪ
: دادﻩ ﻣﯽ ﺷﻮدevent Handler ﺑﻪTAPI اﺳﺖ ﮐﻪ ﺗﻮﺳﻂITCallNotificationEvent اﺷﺎرﻩ ﮔﺮ ﺑﺮای واﺳﻂ
http://sheidaian.persianblog.com