Arkadaslar bunu ben yazmadim bi siteden direk almisimdir J ama hangisi hatirlamiyorum
Umarim isinize yarar...
11. INTERNET UYGULAMALARI YARATMA
Internetten bahsederken insanların ne kastettiğini anlamak çok zordur. Çünkü ortada çok farklı türden Internet uygulamaları vardır. Visual Basic farklı türden uygulamalar geliştirebilme olanakları sağlamaktadır. Bu olanakları aşağıdaki tablo ile gösterebiliriz.
Internet Uygulaması Visual Basic Olanağı
Bilgisayarlar arası doğrudan iletişim Winsock Kontrol nesnesi
Dosya Transferi Internet Transfer Kontrol nesnesi
Web sayfalarını dolaşma WebBrowser kontrol nesnesi
Internette çalışan uygulamalar ActiveX dokümanları
Uygulamaların internet üzerinden dağıtılması Setup Wizard
HTML sayfalarında kullanılabilen bileşenler ActiveX kontrol nesneleri
Veritabanı uygulamaları Veri erişimi olan içeren dokümanlar.
Bu bölümde ActiveX Internet Control nesnelerinin kullanımı anlatılacaktır.
11.1. WINSOCK CONTROL NESNESİ KULLANIMI
WinSock kontrol nesnesi, TCP ve UDP protokollerini kullanarak uzaktaki bir makineye bağlanmak, ve veri alışverişinde bulunmak için kullanılır.
Kullanımları:
- Sunumcu makinesine göndermeden önce kullanıcı bilgilerini toplayan bir istemci uygulama yaratmak
- Bir çok kullanıcıdan bilgi toplayan bir sunumcu uygulama yaratmak
- Bir sohbet uygulaması gerçekleştirmek
Protokol seçimi:
- TCP protokolü bağlantı tabanlı bir protokoldür ve telefon bağlantısı ile benzerlik gösterir. İletişimden önce bağlantının yapılması gerekir.
- UDP protokolü bağlantısız bir protokoldür, mesajlar bilgisayarlar arasında gönderilirken bağlantı ile ilgilenilmez. Yani uygulamalar bağlantıdan bağımsız davranır.
Bu protokollerden birini seçmeye karar vermek için aşağıdaki soruların cevaplanması gerekir.
- Gönderilen bir veri için alındı bilgisi gerekiyor mu? TCP
- Gönderilecek veri büyük mü? TCP. (UDP ile sınırlı miktarda veri gönderilebilir ve veri bütünlüğü bozulabilir.)
- Verilerin gönderileceği an belirsiz mi ? UDP. Örneğin bir uygulama bittiğinde başka bir uygulama bundan haberdar edilecekse UDP kullanılır.
Protokolün belirtilmesi Winsock kontrol nesnesinin Protocol özelliğine değer atamakla olur. Örneğin
Winsock1.Protocol = sckTCPProtocol
Örnek: TCP protokolünün kullanımı.
WinSock kontrol nesnesinin TCP protokolünü nasıl kullandığını görmek için aşağıdaki adımlar halinde geliştirilen uygulamayı inceleyin.
Öncelikle uygulamanın istemci veya sunumcu olmasına karar verilir. Sunumcu yaratılması demek, uygulamanın belli bir girişi dinlemesi, eğer bir istemciden bağlantı yapılırsa bu istemcinin isteğini alıp bağlantıyı gerçekleştirmek ve daha sonra istemci-sunumcu arasında veri alışverişini sağlamak demektir. Şimdi bir sunumcunun nasıl gerçekleştirildiğini görelim.
- Standart EXE türünden bir proje yaratın.
- Formun ismini frmSunumcu olarak değiştirin. Caption özelliğini de “TCP Sunumcu” olarak değiştirin.
- Form üzerine bir WinSock kontrol nesnesi yerleştirin ve ismini tcpSunumcu olarak değiştirin.
- Form üzerine iki tane TextBox yerleştirin, isimlerini txtGonder ve txtAl olarak değiştirin.
- Aşağıdaki kodu formun içine ekleyin.
Private Sub Form_Load()
tcpSunumcu.LocalPort = 1001
tcpSunumcu.Listen
frmIstemci.Show
End Sub
Private Sub tcpSunumcu_ConnectionRequest _
(ByVal requestID As Long)
If tcpSunumcu.State <> sckClosed Then _
tcpSunumcu.Close
tcpSunumcu.Accept requestID
End Sub
Private Sub txtGonder_Change()
tcpSunumcu.SendData txtGonder.Text
End Sub
Private Sub tcpSunumcu_DataArrival _
(ByVal bytesTotal As Long)
Dim strVeri As String
tcpSunumcu.GetData strVeri
txtAl.Text = strVeri
End Sub
Bu Sunumcuyu test etmek için bir istemci yaratalım.
- frmIstemci adında ve Caption özelliği “TCP Istemci olan bir form ekleyin.
- Yukarıdaki forma yerleştirilmiş tüm kontrol nesnelerini bu form üzerine kopyalayın. WinSock kontrol nesnesinin ismini tcpIstemci olarak değiştirin.
- CmdBaglan adlı bir CommandButton yerleştirin. Caption özelliğini “BAGLAN” olarak değiştirin.
- Kullandığınız bilgisayarın ağ ismini bulun ve aşağıdaki kodu formun kod kesimine ekleyin.
Private Sub Form_Load()
tcpIstemci.RemoteHost = "ilker"
tcpIstemci.RemotePort = 1001
End Sub
Private Sub cmdBaglan_Click()
tcpIstemci.Connect
End Sub
Private Sub txtGonder_Change()
tcpIstemci.SendData txtGonder.Text
End Sub
Private Sub tcpistemci_DataArrival _
(ByVal bytesTotal As Long)
Dim strVeri As String
tcpIstemci.GetData strVeri
txtAl.Text = strVeri
End Sub
Yukarıdaki proje basit bir istemci-sunumcu uygulamasıdır. Projeyi çalıştırın. Önce BAGLAN butonuna basın. Daha sonra txtGonder metin kutusuna yazı yazın. Yazılan yazıların aynı zamanda diğer formun txtAl metin kutusunda belirdiği görülecektir.
Bu projeyi farklı makineler üzerinde denemek de mümkündür. Tek yapılması gereken RemoteHost özelliğine uygun bir değer aktarmaktır.
11.2. INTERNET TRANSFER CONTROL NESNESİ KULLANIMI
Internet Transfer Control nesnesi HTTP ve FTP olarak bilinen ve geniş bir kullanım alanına sahip olan internet protokollerini kullanma olanağı dağlar.
ITC kullanarak bu protokolleri destekleyen herhangi bir web sitesine bağlanmak ve dosya transferi yapmak(OpenURL ve Execute metotlarını kullanarak) mümkündür.
Kullanımları:
- Bir uygulamanın içine bir FTP ve HTTP tarayıcısı yerleştirme.
- FTP sitesinden otomatik olarak dosya transferi sağlayan bir uygulama geliştirmek.
- Web sayfalarının referans gösterdiği grafikleri yüklemek için uygulama geliştirmek.
- Web sayfasından alınan dinamik verilerin istenen biçimlerde gösterilebilmesine olanak tanıyan uygulamalar geliştirmek.
Şimdi aşağıdaki FTP tarayıcısı örneğini gerçekleştirelim.
- Yeni bir proje yaratın, Proje adını prjFTP, form isimini frmFTP ve form Caption özelliğini “FTP BROWSER” OLARAK değiştirin.
- Projeyi kaydedin.
- Form üzerine txtAdres ve txtDir adında iki tane TextBox yerleştirin. Yerleşimlerini ileride verilecek form görüntüsüne göre yapın.
- Form üzerine bir ITC (Inet) nesnesi yerleştirin. İsmini inetBrowse olarak değiştirin.
- Aşağıdaki kodu forma ekleyin.
Option Explicit
Dim msTempDir As String
Dim msDir As String
Private Declare Function GetTempPath _
Lib "kernel32" Alias "GetTempPathA" ( _
ByVal nBufferLength As Long, _
ByVal lpBuffer As String _
) As Long
Private Sub Form_Load()
Dim lLen As Long
lLen = 144
msTempDir = Space(lLen)
lLen = GetTempPath(lLen, msTempDir)
msTempDir = Left(msTempDir, lLen)
End Sub
Private Sub txtAdres_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc(vbCr) Then
KeyAscii = 0
txtAdres.SelStart = 0
txtAdres.SelLength = Len(txtAdres)
On Error GoTo errOpenURL
inetBrowse.URL = txtAdres.Text
inetBrowse.Execute , "Dir"
Caption = inetBrowse.URL
End If
Exit Sub
errOpenURL:
Select Case Err.Number
Case icBadUrl
MsgBox " YANLIS ADRES, TEKRAR GIRIN"
Case icConnectFailed, icConnectionAborted, _
icCannotConnect
MsgBox "AG BAGLANTISI YAPILAMIYOR."
Case icInetTimeout
MsgBox "BAGLANTI KAPANDI."
Case icExecuting
inetBrowse.Cancel
If inetBrowse.StillExecuting Then
Caption = "IPTAL EDILEMIYOR."
Else
Resume
End If
Case Else
Debug.Print Err.Number, Err.Description
End Select
End Sub
Private Sub txtDir_DblClick()
If txtDir.SelLength Then
If Right(txtDir.SelText, 1) = "/" Then
txtAdres = txtAdres & "/" & Left(txtDir.SelText, txtDir.SelLength - 1)
On Error GoTo errBrowse
msDir = Right(txtAdres, Len(txtAdres) - Len(inetBrowse.URL))
inetBrowse.Execute , "Dir " & msDir & "/*"
Else
msDir = Right(txtAdres, Len(txtAdres) _
- Len(inetBrowse.URL)) & "/" & txtDir.SelText
msDir = Right(msDir, Len(msDir) - 1)
inetBrowse.Execute , "Get " & msDir & _
" " & msTempDir & txtDir.SelText
End If
End If
Exit Sub
errBrowse:
If Err = icExecuting Then
inetBrowse.Cancel
If inetBrowse.StillExecuting Then
Caption = "Iptal Edilemez."
Else
Resume
End If
Else
Debug.Print Err & " " & Err.Description
End If
End Sub
Private Sub inetBrowse_StateChanged(ByVal State As Integer)
Select Case State
Case icError
Debug.Print inetBrowse.ResponseCode & " " & _
inetBrowse.ResponseInfo
Case icResolvingHost, icRequesting, icRequestSent
Caption = "Araniyor..."
Case icHostResolved
Caption = "Bulundu."
Case icReceivingResponse, icResponseReceived
Caption = "Veriler aliniyor."
Case icResponseCompleted
Dim sBuffer As String
sBuffer = inetBrowse.GetChunk(1024)
If sBuffer <> "" Then
Caption = "Tamamlandi."
txtDir = sBuffer
Else
Caption = "Dosya " & msTempDir & ". dizinine kaydedildi."
End If
Case icConnecting, icConnected
Caption = "Baglaniyor."
Case icDisconnecting
Case icDisconnected
Case Else
Debug.Print State
End Select
End Sub
Bu kod, belirtilen bir ftp adresinden dizin adlarını veya bir dosyayı alır. Eğer dizin adları alınıyorsa bu altta bulunan metin kutusuna yansıtılır. Dosya alınıyorsa dosya Windows Temp dizinine kaydedilir.
Programın çalışması aşağıdaki gibidir.
ITC nesnesinin işlevi kullanılan internet protokolüne göre değişir. Örneğin GetHeader metodu sadece HTTP protokolü için geçerlidir.
Internet Transfer Control nesnesinin Execute metodu ile çalıştırılabilecek komutlar aşağıdaki tablolarda gösterilmiştir.
FTP protokolü için:
CD dosya1 Belirtilen dizine geçer.
CDUP Bir üst dizine geçer.
DELETE dosya1 Belirtilen dosyayı siler.
DIR [dosya1] Belirtilen (veya aktif olan) dizini listeler.
GET dosya1 dosya2 Uzaktaki dosya1 dosyasını dosya2 ile belirtilen dosyaya
kaydeder.
MKDIR dosya1 Belirtilen isimde bir dizin yaratır.
PUT dosya1 dosya2 dosya1 adlı dosyayı uzaktaki bilgisayarda dosya2 olarak
kaydeder.
PWD Aktif olan dizinin adını döndürür.
QUIT Bağlantıyı koparır.
RECV dosya1 dosya2 GET komutu ile aynı işi yapar.
RENAME d1 d2 Belirtilen d1 dosyasının ismini d2 olarak değiştirir.
RMDIR dosya1 dosya1 ile belirtilen dizini siler.
SEND dosya1 dosya1 adlı dosyayı aynı ad ile uzaktaki sisteme kaydeder.
SIZE dosya1 Belirtilen dosyanın uzunluğunu döndürür.
HTTP protokolü için:
GET URL özelliğiyle belirtilen dosyayı getirir.
HEAD Sadece dosya başlıklarını getirir.
POST Belirtilen bir veriyi gönderir.
PUT 3. Parametre ile verilen veriyi uzaktaki veriyle değiştirir.
11.3. WEB BROWSER KONTROL NESNESİ KULLANIMI
WebBrowser kontrol nesnesi, bir web sayfalarını dolaşabilmek için bir kontrol nesnesi sağlar. Bu kontrol nesnesi form üzerine yerleştirilen bir pencere gibidir. Bu kontrol nesnesini kullanarak kendi web tarayıcımızı yapmamız mümkündür.
Bu kontrol nesnesinin kullanımı aşağıda örneklenmiştir. Burada bir form kullanılarak web sayfası görüntülenmektedir.
- Yeni bir proje yaratın. Formun üzerine bir WebBrowser kontrol nesnesi yerleştirin ve aşağıdaki isimlendirmeyi kullanın.
Project prjWEB
Form frmWEB
WebBrowser web1
- Aşağıdaki kodu formun içine ekleyin.
Private Sub Form_Load()
web1.Navigate "file:\\" & App.Path & "\v-groups.htm"
End Sub
Private Sub Form_Paint()
web1.Left = 0
web1.Top = 0
web1.Width = Me.Width
web1.Height = Me.Height
End Sub
- Programı çalıştırın. Çalışma sırasındaki görünüm aşağıdaki gibidir.
11.4. INTERNET EXPLORER İLE OTOMASYONUN KULLANILMASI
Internet Explorer nesnesi SHDOCVW.DLL kitaplıği içinde tanımlıdır. Bu nesnenin otomasyon çerçevesinde kullanımı aşağıda örneklenmiştir.
Örnek: Internet explorer kullanan bir form gerçekleştirimi.
- Yeni bir proje başlatın. Projeye aşağıdaki nesneleri ekleyin.
|
Project |
Name |
prjIE |
|
Form |
Name |
frmIE |
|
|
MinButton |
False |
|
|
MaxButton |
False |
|
|
Caption |
“WEB TARAYICI” |
|
TextBox |
Name |
txtAdres |
|
CommandButton |
Name |
cmdIleri |
|
|
Caption |
“>>” |
|
CommandButton |
Name |
cmdGeri |
|
|
Caption |
“<<” |
|
Label |
Caption |
“Adres:” |
- Aşağıdaki formu koda ekleyin.
Option Explicit
Dim WithEvents ie As InternetExplorer
Private Sub Form_Load()
Set ie = GetObject("", "InternetExplorer.Application")
ie.Visible = True
txtAdres = "file:\\" & App.Path & "\v-groups.htm"
End Sub
Private Sub ie_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
txtAdres.Text = URL
txtAdres.SelLength = Len(txtAdres)
Caption = ie.LocationName
End Sub
Private Sub txtAdres_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc(vbCr) Then
KeyAscii = 0
txtAdres.SelLength = Len(txtAdres)
ie.Navigate txtAdres
End If
End Sub
Private Sub ie_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)
Select Case Command
Case CSC_NAVIGATEBACK
cmdGeri.Enabled = Enable
Case CSC_NAVIGATEFORWARD
cmdIleri.Enabled = Enable
Case CSC_UPDATECOMMANDS
End Select
End Sub
Private Sub cmdGeri_Click()
ie.GoBack
End Sub
Private Sub cmdIleri_Click()
ie.GoForward
End Sub
Private Sub ie_OnQuit()
End
End Sub
- Projeyi çalıştırın. Aşağıdaki form görüntüsü çıkacaktır.
Şimdi burada yapılan işlemleri açıklayalım.
Form_Load olayında önce bir Internet Explorer nesnesi yaratılmaktadır. Daha sonra form üzerindek adres metin kutusuna ilk değer atanmaktadır.
Metin kutusu üzerinde ENTER tuşuna basıldığında metin kutusu içindeki adres Internet Explorer nesnesine iletilir ve belirtilen adresin açılması sağlanır.
Internet Explorer nesnesi yukarıda kullanılan WebBrowser kontrol nesnesi ile aynı özellik metot ve olaylara sahiptir.
11.5. KİŞİSEL WEB SUNUMCULARI
Kişisel Web sunumcuları (Personal Web Server) .ASP uzantılı aktif sunumcu sayfalarını kullanırlar. Bu sayfalar standart metin kütükleridir. İçinde HTML kodları ve makrolar yer alır.
Aktif sunumcu sayfaları bir sunumcu üzerinde çalışır ve sunumcunun Dosya Sistemi ile sunumcu üzerinde yüklenmiş nesneleri kullanabilme özelliğine sahiptir. Bu sayfaların en büyük yararlarından biri de yaratılmasının ve kullanılmasının çok kolay olmasıdır.
Kişisel web sunumcularının sağladığı olanaklar:
- Internet veya Intranet üzerinden kişisel web sayfalarının dağıtılmasını sağlama
- FTP servislerini kullanarak dosya transferini sağlama
ASP dosyaların tüm kodu sunumcu üzerinde çalışır. İstemciler sonuçları HTML formatında görürler.
ASP dosyalarında makrolar (script code) <% ve %> karakterleri arasında yazılır. Bu karakterler arasına yazılmış kodlar sunumcuda çalışır ve bu kısımlar tarayıcıda gözükmez.
Bu tür bir web sayfasına örnek olarak aşağıdaki ASP dosyası verilebilir.
BILGI.ASP
<HTML>
<HEAD><TITLE> BILGI FORMU</TITLE></HEAD>
<BODY BGCOLOR = #FFFFFF>
<HR>
<%
On Error Resume Next
Dim kisi
If Request.Form("adsoyad")=" " Then
%>
<FORM METHOD=POST ACTION="bilgi.asp">
<P>
AdSoyad: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20
NAME="adsoyad">
<P>
Dogum Yeri: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20
NAME="dyer">
<P>
Adres: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20
NAME="adres">
<P>
Semt/Ilce: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20
NAME="semt">
<P>
Sehir: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20
NAME="sehir">
<P>
Posta Kodu: <INPUT TYPE=TEXT SIZE=20 MAXLENGTH=20
NAME="pkod">
</FORM>
<%
Else
set kisi = CreateObject("Bilgi.clsBilgi")
kisi.Adsoyad=Request.Form("adsoyad")
kisi.dyer=Request.Form("dyer")
kisi.adres=Request.Form("adres")
kisi.semt=Request.Form("semt")
kisi.sehir=Request.Form("sehir")
kisi.pkod=Request.Form("pkod")
%>
<P>
Ad soyad: <%kisi.Adsoyad%>
<P>
Dogum yeri: <%kisi.dyer%>
<P>
Adres : <%kisi.adres%>
<P>
Semt/Ilce: <%kisi.semt%>
<P>
Sehir: <%kisi.sehir%>
<P>
Posta kodu: <%kisi.pkod%>
<%
End If
%>
</BODY>
<HTML>
Ana Sayfa