Vbasic İle Dosya Transferi

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    holocaust
    holocaust's avatar
    Kayıt Tarihi: 11/Eylül/2005
    Erkek
    Visual Basicte Winsock ile dosya transferi
    Tekrar Merhaba
    dosya transferi için öncelikle visual basicte winsock nesnesini kullanmayı iyice öğrenin

    form üzerine 2 tane winsock, 1 textbox, 2 label, 2 timer koy.
    text1
    command1 = "Sunucu"
    command2 = "İstemci"
    command6 = "Gönder"
    label6 ve Label 7 yi bilgi için bağlantı sağlandı ve dosya aktarımı tamamlandı gibi
    durum bildirmek için kullanıyoz
    sora kodu general decleration a yapıştır..

    şematik form görüntüsü
    _____________________________________
    ============== =============
    | Command1 | | Command2 |
    ============== =============

    ==================== ==========
    text1.text | Gönder |
    ==================== ==========

    © © © ©

    timer1, timer2 winsock1, winsock2

    ==================== ==========
    label 6 label 7
    ==================== ==========


    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
    Winsock2.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
    Winsock2.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.
    Winsock2.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 Command1_Click()
    Dim isim
    isim = InputBox("Adınızı girin", "İsim", Winsock1.LocalHostName)
    If isim = "" Then Exit Sub
    Label2 = isim
    Winsock1.LocalPort = 100
    Winsock1.Listen
    Label6 = "Bağlantı bekleniyor..."
    Label7 = "sunucu"
    End Sub
    Private Sub Command2_Click()
    On Error Resume Next
    Dim isim, adres
    isim = InputBox("Adınızı girin", "isim", Winsock2.LocalHostName)
    If isim = "" Then Exit Sub
    Label3 = isim
    adres = InputBox("IP adresini yada bilgisayar adını girin", "IP", Winsock2.LocalIP)
    If adres = "" Then Exit Sub
    Winsock2.Connect adres, 100
    Label6 = "Bağlanıyor..."
    Label7 = "istemci"
    End Sub
    Private Sub Command3_Click()
    Winsock1.Close
    Winsock2.Close
    Label6 = "Ağ dan çıkıldı"
    Label7 = "-"
    Command1.Enabled = True
    Command2.Enabled = True
    End Sub

    Private Sub Command6_Click()
    DosyaGonder (Text1.Text)
    End Sub

    Private Sub Form_Load()
    Label6 = "Durum..."
    Label7 = "-"
    Label6.BorderStyle = 1
    Label7.BorderStyle = 1
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    End
    End Sub
    Private Sub Winsock1_Close()
    MsgBox "Bağlantı kesildi", vbCritical, "Hata"
    Command3_Click
    End Sub
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    If Winsock1.State <> sckClosed Then Winsock1.Close
    Winsock1.Accept requestID
    End Sub
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim Gecici As String
    Dim Gelen As String
    If DosyaACIKMI = False Then
    Open "D:\ersan.jpg" For Binary Access Write As #2
    DosyaACIKMI = True
    ElseIf DosyaACIKMI = True Then
    End If
    Winsock1.GetData Gelen
    Gecici = Gelen
    If Gecici = "son" Then
    Close #2
    DosyaACIKMI = False
    Else
    Put 2, , Gecici
    End If
    End Sub
    Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox "Bağlantı hatası" & Description, vbCritical, "Hata"
    Command3_Click
    End Sub
    Private Sub Winsock2_Close()
    MsgBox "Bağlantı kesildi", vbCritical, "Hata"
    Command3_Click
    End Sub
    Private Sub Winsock2_Connect()
    Label6 = "Bağlantı sağlandı"
    End Sub
    Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
    If DosyaACIKMI = False Then 'dosyanın daha önceden açık olup olmadığı kontrol ediliyor.
    Open "D:\ersan.jpg" 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

    Winsock2.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
    Private Sub Winsock2_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox "Bağlantı hatası " & Description, vbCritical, "Hata"
    Command3_Click
    End Sub

    Yararlı olması dileğiyle // HoLoCaUsT

    Holocaust The Late Night Hacker
Toplam Hit: 1585 Toplam Mesaj: 1