'Winsock ile Dosya Alış-Verişi
'Winsock ile dosya alıp göndermenin en kolay yolu!
'Örnek kodda sadece dataarrival olayını yazdim
'winsock bağlantı işlemlerini işin en kolay kısmı
'bu kod hem alıcı hem de gönderici için geçerlidir
'alıcı
' Winsock1.LocalPort = 100
' Winsock1.Listen
'ile dinleyecek ve connectionrequest olayında ise
' Winsock1.Close
' Winsock1.Accept (RequestID)
'ile kabul edecek
'gönderici ise
' Winsock1.Connect RemoteHost, 100
'ile bağlanıp
' DosyaGonder "c:\dosya.exe"
'fonksiyonunu kullanarak dosya göndermeye başlayacak
'Kolay Gelsin
Dim DosyaACIKMI As Boolean
Public Function DosyaGonder(HangiDosya As String)
Dim Gecici As String
Dim Gecici2 As Long
Dim DosyaBoyutu, Gonderilen
Open HangiDosya For Binary Access Read As #1 'Dosya binary formatta açılıyor
DosyaBoyutu = FileLen(HangiDosya) 'Dosya boyutu alınıyor
Gecici2 = 5000 'dosya parça parça gönderileceği için bir parçanın boyutu belirleniyor
Gonderilen = 0
Do While Gonderilen < DosyaBoyutu
If (DosyaBoyutu - Gonderilen) < Gecici2 Then 'eğer gidecek parça gecici2 den küçükse
'sadece gidecek parça kadar yer ayrılıyor...
Gecici2 = DosyaBoyutu - Gonderilen
Me.Caption = "Dosya Gönderiliyor..."
Gecici = Space$(Gecici2)
Get 1, , Gecici
Winsock1.SendData Gecici
Gonderilen = Gonderilen + Gecici2
Else 'değilse aynen gidiyor buradaki işlem yukarısı ile aynı
'kod kısaltılabilir ama anlaşılır olması için böyle daha iyi
Me.Caption = "Dosya Gönderiliyor..."
Gecici = Space$(Gecici2) 'gecici değişkenine yer ayrılıyor
Get 1, , Gecici 'dosyadan gecici2 kadar bilgi okunuyor
Winsock1.SendData Gecici 'gönderiliyor
Gonderilen = Gonderilen + Gecici2 'gönderilen değişken arttırılıyor
End If
DoEvents
Loop 'dosya gönderme işlemi bittiğine göre bunu da haber vermemiz gerekir.
Winsock1.SendData "son" 'karşı taraf bunu kontrol edecek
'eğer gelen bilgi "son" ise dosyayı kapatacak aksi takdirde devam edecek
'biz burda sonlandırıyoruz.
Close #1 'kendi dosyamızı kapatıyoruz
Me.Caption = "Tamamlandı" 've bitti.
End Function
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Gecici As String
Dim Gelen As String
If DosyaACIKMI = False Then 'dosyanın daha önceden açık olup olmadığı kontrol ediliyor.
Open "c:\deneme.exe" For Binary Access Write As #2 'gelen dosya c:\deneme.exe ile
'kaydediliyor.siz bunu değiştirebilirsiniz.
DosyaACIKMI = True
ElseIf DosyaACIKMI = True Then
End If
Winsock1.GetData Gelen 'bilgi alınıyor
Gecici = Gelen 'gecici bir değişkene atanıyor
If Gecici = "son" Then 'eğer son parçaysa dosya kapanıyor;
Close #2
DosyaACIKMI = False
Else
Put 2, , Gecici 'değilse dosyaya yazılıyor.
End If 've bitti
End Sub
'Winsock ile dosya alıp göndermenin en kolay yolu!
'Örnek kodda sadece dataarrival olayını yazdim
'winsock bağlantı işlemlerini işin en kolay kısmı
'bu kod hem alıcı hem de gönderici için geçerlidir
'alıcı
' Winsock1.LocalPort = 100
' Winsock1.Listen
'ile dinleyecek ve connectionrequest olayında ise
' Winsock1.Close
' Winsock1.Accept (RequestID)
'ile kabul edecek
'gönderici ise
' Winsock1.Connect RemoteHost, 100
'ile bağlanıp
' DosyaGonder "c:\dosya.exe"
'fonksiyonunu kullanarak dosya göndermeye başlayacak
'Kolay Gelsin
Dim DosyaACIKMI As Boolean
Public Function DosyaGonder(HangiDosya As String)
Dim Gecici As String
Dim Gecici2 As Long
Dim DosyaBoyutu, Gonderilen
Open HangiDosya For Binary Access Read As #1 'Dosya binary formatta açılıyor
DosyaBoyutu = FileLen(HangiDosya) 'Dosya boyutu alınıyor
Gecici2 = 5000 'dosya parça parça gönderileceği için bir parçanın boyutu belirleniyor
Gonderilen = 0
Do While Gonderilen < DosyaBoyutu
If (DosyaBoyutu - Gonderilen) < Gecici2 Then 'eğer gidecek parça gecici2 den küçükse
'sadece gidecek parça kadar yer ayrılıyor...
Gecici2 = DosyaBoyutu - Gonderilen
Me.Caption = "Dosya Gönderiliyor..."
Gecici = Space$(Gecici2)
Get 1, , Gecici
Winsock1.SendData Gecici
Gonderilen = Gonderilen + Gecici2
Else 'değilse aynen gidiyor buradaki işlem yukarısı ile aynı
'kod kısaltılabilir ama anlaşılır olması için böyle daha iyi
Me.Caption = "Dosya Gönderiliyor..."
Gecici = Space$(Gecici2) 'gecici değişkenine yer ayrılıyor
Get 1, , Gecici 'dosyadan gecici2 kadar bilgi okunuyor
Winsock1.SendData Gecici 'gönderiliyor
Gonderilen = Gonderilen + Gecici2 'gönderilen değişken arttırılıyor
End If
DoEvents
Loop 'dosya gönderme işlemi bittiğine göre bunu da haber vermemiz gerekir.
Winsock1.SendData "son" 'karşı taraf bunu kontrol edecek
'eğer gelen bilgi "son" ise dosyayı kapatacak aksi takdirde devam edecek
'biz burda sonlandırıyoruz.
Close #1 'kendi dosyamızı kapatıyoruz
Me.Caption = "Tamamlandı" 've bitti.
End Function
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Gecici As String
Dim Gelen As String
If DosyaACIKMI = False Then 'dosyanın daha önceden açık olup olmadığı kontrol ediliyor.
Open "c:\deneme.exe" For Binary Access Write As #2 'gelen dosya c:\deneme.exe ile
'kaydediliyor.siz bunu değiştirebilirsiniz.
DosyaACIKMI = True
ElseIf DosyaACIKMI = True Then
End If
Winsock1.GetData Gelen 'bilgi alınıyor
Gecici = Gelen 'gecici bir değişkene atanıyor
If Gecici = "son" Then 'eğer son parçaysa dosya kapanıyor;
Close #2
DosyaACIKMI = False
Else
Put 2, , Gecici 'değilse dosyaya yazılıyor.
End If 've bitti
End Sub