Home > Visual Basic, Winsock > Belajar Winsock bagian 2 – Membuat aplikasi chat sederhana 1:1

Belajar Winsock bagian 2 – Membuat aplikasi chat sederhana 1:1

January 28, 2010

Setelah memahami properties-properties dasar yang harus disetting untuk membuat aplikasi sederhana menggunakan winsock, pada artikel ke 2 dari 5 seri belajar winsock ini kita akan membuat aplikasi chat sederhana dengan pola 1:1 atau dengan istilah lainnya single connection.

Membuat aplikasi chatting seperti MSN Messenger atau Yahoo Messenger sebenarnya mudah (tapi tidak termasuk saya ya :D) dan kita sudah mempelajari bagaimana membuat koneksi sederhana menggunakan winsock, selanjutnya kita tinggal mengirimkan data menggunakan method .SendData dan menghandle data yang diterima melalui event Winsock_DataArrival.

Contoh penggunaan method SendData :

Private Sub cmdSend_Click()
    With Winsock1
        .SendData "Belajar Winsock Bagian 2"
    End With
    DoEvents
End Sub

Pemanggilan fungsi DoEvents untuk memberikan jeda waktu untuk menyelesaikan pengiriman data.

Kode untuk menghandle data yang masuk juga sangat sederhana. Winsock menerima data dan menyimpannya di dalam buffer. Untuk memanggil data ini, kita tinggal memanggil method .GetData dan ingat kita tidak bisa memanggil method ini setiap waktu karena setelah itu buffer otomatis dikosongkan. Jadi waktu yang tepat untuk memanggil method ini adalah pada saat event Winsock_DataArrival dijalankan.

Contoh penggunaan method GetData :

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String

    Call Winsock1.GetData(strData)
    MsgBox strData
End Sub

Oke, sampai disini kita sudah mengetahui dasar-dasar untuk membuat aplikasi chat sederhana dan untuk mendemokan ini kita akan membutuhkan 2 program kita sebut saja klien dan server. Adapun persiapan untuk aplikasi server/klien :

  1. Objek Winsock
  2. Label
  3. 2 TextBox
  4. CommandButton

Source code lengkap aplikasi server :

Option Explicit

Private Sub cmdSend_Click()
    Winsock1.SendData txtChat.Text
    DoEvents

    txtMain.Text = txtMain.Text & vbCrLf & txtChat.Text
    txtChat.Text = ""
End Sub

Private Sub Form_Load()
    Winsock1.LocalPort = 11111
    Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    'reset the socket, and accept the new connection
    Winsock1.Close
    Winsock1.Accept requestID
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String

    'get the data and display it in the textbox
    Winsock1.GetData strData
    txtMain.Text = txtMain.Text & vbCrLf & strData
    txtMain.SelStart = Len(txtMain.Text)
End Sub

Aplikasi server tinggal duduk maniz😀 dan menunggu koneksi yang masuk.

Source code lengkap aplikasi klien :

Option Explicit

Private Sub Form_Load()
    'set up the Winsock1 to connect to the local computer
    Winsock1.RemoteHost = "127.0.0.1"
    Winsock1.RemotePort = 11111
    Winsock1.Connect
End Sub

Private Sub cmdSend_Click()
    'send the data thats in the text box and
    'clear it to prepare for the next chat message
    Winsock1.SendData txtChat.Text
    DoEvents

    txtMain.Text = txtMain.Text & vbCrLf & txtChat.Text
    txtChat.Text = ""
End Sub

Private Sub Winsock1_Connect()
    'we are connected!
    MsgBox "Connected"
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String

    ' get the data from the socket
    Winsock1.GetData strData
    ' display it in the textbox
    txtMain.Text = txtMain.Text & vbCrLf & strData
    ' scroll the box down
    txtMain.SelStart = Len(txtMain.Text)
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)
    ' an error has occured somewhere, so let the user know
    MsgBox "Error: " & Description
    ' close the socket, ready to go again
    Winsock1.Close
End Sub

Sample program bisa didownload disini dan artikel berikutnya insya Alloh dengan judul Belajar Winsock bagian 3 – Multiple Connection segera menyusul.

Selamat mencoba🙂

  1. May 19, 2010 at 10:27 am

    Gak paham:D

  2. May 19, 2010 at 9:05 pm

    Konsepnyakan sangat sederhana untuk aplikasi server diset dg mode listen(mendengarkan) pada port tertentu (ex. 11111) jadi yg memulai koneksi adalah aplikasi klien.

    Jadi biar paham dicoba dulu om😀

  3. June 5, 2010 at 4:06 am

    maaas saaya mau nayak neh chat antar Lan Ya?

  4. June 5, 2010 at 4:12 am

    yboot :

    maaas saaya mau nayak neh chat antar Lan Ya?

    Maksudnya sample aplikasi chat antar lan ?

  5. August 15, 2010 at 3:53 pm

    mantaf abissss…..
    sangat membantu,
    mas bisa minta imelnya ga? plis saya lg ada tugas nih.

  6. August 16, 2010 at 2:28 am

    k4m4r82@yahoo.com
    yg penting nanyanya jg yg susah2x😀

  7. amad
    August 30, 2010 at 3:19 am

    maz aku ikutan kirim email ya mau nimbrung nanya ki….. hehe

    • August 30, 2010 at 5:41 am

      Yaph silahkan

  8. November 7, 2010 at 3:28 am

    bang admin mau tanya, ini bisa digunakan untuk chat via online/internet ? atau hanya bisa digunakan antar LAN ?

    • November 7, 2010 at 8:22 am

      Bisa kok via internet klo udah berhasil mengimplementasikan artikel ini.

  9. Pemula
    November 7, 2010 at 9:26 am

    kalau tidak pakai hamachi tidak bisa y?
    kalau mysql di akses via internet ada tutorialnya ndak ?😀
    makasih sebelumnya

    • November 7, 2010 at 11:58 am

      Intinya enggak ada yg aneh akses databse via internet atw lokalan yang penting om bisa ngeping IP address server plus port MySQLnya memang bisa diakses dari luar, udah itu aja.

      Tru klo enggak mau pake hamachi (yg gratisan), om tinggal bangun sendiri aja jaringan VPNnya ya lumayan investasinya jutan rupiah, atw mungkin ratusan jt kali ya? CMIIW😀

      Atw coba juga yg gratisan namanya OpenVPN konfigurasinya lumayan ribet, jadi enggak cocox buat sy yg lebih senang instan2xan alias gampang.

      • Pemula
        November 9, 2010 at 3:07 am

        kalau menggunakan ip public tanpa perlu vpn bisa tidak om?
        thx😀

        • November 9, 2010 at 3:35 am

          Kayax klo ip public servernya bisa di ping dari komputer om seharusnya bisa.

    • March 15, 2011 at 5:07 am

      pelajari CPANEL

  10. catrin
    November 30, 2010 at 5:47 am

    Kalau dihubungkan dengan socket gimana ya…? Thank’s

    • November 30, 2010 at 6:29 am

      Winsock itu sendiri merupakan implementasi dari socket mba.
      Winsock = Windows Socket

      Di VB sendiri untuk mengakses socket bisa dengan 2 cara menggunkan fungsi API atau komponen Winsock, di artikel ini saya menggunakan komponen winsock karena alasan sederhana yaitu lebih gampang😀.

      CMIIW

  11. jack
    December 23, 2010 at 3:03 am

    pakde Admin kmeren aq dah coba2 implementasikan aplikasi chat saya dalam jaringan per to per (ada 2 komputer) semua dah tk sett insya Allah bener saya ping jalan.. ogh yang jadi kendala
    saat aq klik dan Q jalankan aplikasi chat ke komputer A bisa tetapi waktu ke komputer B aq klik error dan keluar tulisan * component MSWINSCK>OCX or one its dependencies not correctly registered: a file is missing or invalid * gimana tu pakde
    mohon pencerahan???
    akuliliku43310555

  12. jack
    December 23, 2010 at 3:14 am

    nambah Pakde saya coba di warnet juga sama ki… apanya ya… makasih sebelumnya

    • December 23, 2010 at 3:55 am

      Kayaxnya file MSWINSCK.OCXnya belum ada om, file MSWINSCK.OCX bukan file standar jadi enggak semua komputer punya file itu jadi tinggal dicopyiin plus diregister pake perintah regsvr32

      Selamat mencoba🙂

      • jack
        December 24, 2010 at 3:05 am

        maksudnya piye pakde cara nambahin file MSWINSCK.OCX maklum masih nebiew banget….
        file ny cr di internet & bwt regsvr32 gmana ya…?? btuh pencerahan

  13. jack
    December 24, 2010 at 6:48 am

    makasih Pak de MSWINSCX.OCX dah aq download nanti coba tk guanin klaw ksulitan kapan2 aq tnya lagi moga ndak bosennn!!!!

    • December 24, 2010 at 9:01 am

      Oke om selamat mencoba🙂

  14. gaar4
    February 25, 2011 at 5:46 am

    mohon lebih rinci dunk mas….cz aq baru belajar neh.

    cara aktifin winsocknya gmn ya mas???

    • February 25, 2011 at 6:02 am

      Coba meluncur kesini dulu om.

  15. May 3, 2011 at 10:34 am

    aku mau tanya donk buat bikin aplikasi billing bisa ga ya.. soalnya ga punya toturial nih mas.

    • May 3, 2011 at 1:01 pm

      Coba ini aja om ada source billing silahkan dioprek.

  16. farell
    May 27, 2011 at 4:32 pm

    om admin
    maaf saya msh belu ngerti
    cara pakai nya gmn eaaa???

    • May 28, 2011 at 1:45 am

      Buat 2 project, satu sebagai server lainnya sebagai klien selanjutnya tinggal copas kode diatas.
      Pada saat testing 2 project diatas dijalankan bersamaan.

  17. frank
    June 9, 2011 at 4:14 pm

    terima kasih codingnya%informasinya….mantap…maju IT indonesia

    • June 10, 2011 at 1:54 am

      Oke om, tq udah mampir

  18. satya
    July 14, 2011 at 6:58 am

    Om bisa bantu saya gk???saya mau tanya nie..kalo menghubungkan antara windows 98 dan pentium 4(windw xp) gmn ya ?? soalnya program saya connect aja gk bisa??saya skrg lg ngerjain skripsi Tentang mengirim data paralel via LAN pake program vb.6…..tp blm bisa-bisa….mohon bantuannya,terima kasih

    • July 14, 2011 at 8:37 am

      Coba di ping dulu om antar komputernya mungkin konfigurasi jaringannya belum beres.
      Coba ke link ini om.

  19. surya
    August 9, 2011 at 9:00 am

    ok om udah bisa connect…nah yg saya bingung lg,.kan saya buat program client vb dengan 4 form…dimana form yg kedua untuk connectnya, tp begitu saya mask form 3 dan 4..keterangan dikomputer server gk connect,,kira2 masalahnya dimana ya???trus saya kan mau ngirim data 8 bit dari Kartu komputer PPI 8255 (Lewat Slot ISA bukan DB9)/paralel) ke komuter servernya,nah kira2 kalo paralel perlu membuka port ISAnya gk (seperti serial kan harus buka MS.Comm…..saya bingung nentuin setelah kode winsock sendata/getdatanya….???mohon dibantu ya om,soalnya saya dah 4 bulan belum ketemu solusi software skripsi saya..terima kasih OM..

  20. surya
    August 9, 2011 at 9:36 am

    maksud utamanya gimana program clientnya apabila lebih dari satu form agar status koneksinya tetap connect,apa ada yang perlu ditambah,atau diperbaiki,kira2 dibagian mananya????terima kasih…

    • August 10, 2011 at 4:54 am

      Winsocknya kan ada di form 2 om, jadi begitu diclose ya otomatis koneks ke server putus.
      Mungkin solusinya om buat form khusus untuk winsocknya misal dg nama frmWinsock, form ini jangan sampai ke tutup kecuali klo keluar dari program, jadi semua proses data masuk dan keluar melalui form ini.

  21. surya
    August 14, 2011 at 4:33 am

    kalo misalnya tiap formnya dikasih winsock semua dengan nama sama,tipe sama,arraynya sama gk bisa ya???yawdah…makasih om’ dicoba dulu sarannya🙂

    • August 15, 2011 at 1:23 am

      Oke om dicoba dulu aja saran saya😀

  22. October 4, 2011 at 1:24 am

    mas admin, saya mau tanya nih, SMTP telkom yg
    .SMTPHost = “smtp.telkom.net” << uda ngak bisa..
    Diganti jadi apa sekarang?? Mau kirim mail uda gak bisa, uda ditutup smtp nya..

    • October 4, 2011 at 11:33 am

      Maksudnya apa ya om ?

  23. Oktama
    October 30, 2011 at 8:25 am

    hmhmhm…… saya mau tanya neh sama om……. gmana ya cara mengelola senddata pada winsock.
    contoh :
    Misalkan ini pada server :
    Private sub command1_click()
    winsock1.senddata “data1”
    end sub

    Private sub command2_click()
    winsock1.senddata “data2”
    end sub

    Ini pada client :
    nah gmana neh cara ngelola nya pada saat event :
    Private Sub winsock2_DataArrival( ByVal bytesTotal As Long)
    (bagaimana cara mengelola nya misalkan data1 ingin ditaruh di textbox1 dan data2 ingin ditaruh di textbox2)
    end sub

    TOLONG OM ! SAYA SUNGGUH KEBINGUNGAN !

    • October 31, 2011 at 4:58 am

      Waktu ngirim dari klien tetap harus dikasih tag om misal.

      Private Sub command1_click()
          winsock1.senddata "1#data1"
      End Sub
      
      Private Sub command2_click()
          winsock1.senddata "2#data1"
      End Sub
      

      Jadi biar bisa gampang parsingnya diserver

      
      Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
          Dim strData     As String
          Dim arrData()   As String
          
          Call Winsock1.GetData(strData)
          
          arrData = Split(strData, "#")
          
          Select Case arrData(0)
              Case "1": Text1.Text = arrData(1)
              Case "2": Text2.Text = arrData(1)
          End Select
      End Sub
      
      • Oktama
        October 31, 2011 at 6:41 am

        Terima Kasih banyak om…. akhirnya saya mengerti…. semoga blognya lancar jaya selalu ;)………..

        • October 31, 2011 at 9:27 am

          Sama2x om🙂

  24. Andika nugraha
    November 18, 2011 at 6:29 am

    om saya mau tanya, saya kan punya GPS tracking, tiap menit dia ngirim update posisi datanya ke website vendornya, berdasarkan ip sama port website vendornya itu,, nah skrg saya pengen si GPS ini ngirim data ke komputer saya, sebenernya saya uda rubah settingan ip sama portnya sama settingan di komputer saya tapi tetep aja ga ada (mungkin saya ga tau ngesave datanya dimana), saya juga uda coba pake hyperterminal data update posisinya ada (tapi masa gps trackingnya harus konek ke komputer terus, kan mau dipasang di kendaraan).
    yang mau saya tanyakan :
    1. apakah hyperterminal bisa nerima data via ip atau port, (tidak selalu via com)?
    2. apakah saya harus membuat program winsock?
    3. Klo harus bikin program, Mohon bantuannya Om admin.

    terima kasih

    • November 21, 2011 at 4:06 am

      Klo masalah ini sy belum bisa bantu nih om, belum pernah coba soalnya😀

  25. rizal
    November 23, 2011 at 6:16 am

    fungsi vbCrLf itu buat apa gan??

    • November 23, 2011 at 8:33 am

      Itu konstanta karakter enter om

  26. December 18, 2011 at 9:52 am

    jazakillah, terima kasih banyak. dengan panduan ini aku bisa selesaikan tugasku di kantor bikin program pemanggil antrian. yang mau sourcce code-nya silahkan kirim email. kita bagi2 ilmu. Terima kasih

  27. December 18, 2011 at 9:53 am

    oops, maaf linknya : pemanggil antrian

  28. edo harnando
    January 28, 2012 at 8:01 am

    Pak gmn jika kita mau ngirim dalam bntuk file (file office atau file gambar) bisa gak pak?

    • January 28, 2012 at 9:54 am

      Caranya bisa dilihat disini.

  29. war0k
    May 7, 2012 at 10:39 pm

    bang admin,, mau minta di buatin tutornya cara membuat cleint chatting servernya di mIRC dong… jadi intinya kita membuat aplikasi chatting public yang servernya di mIRC (ex: DALNET, etc) please

    • May 8, 2012 at 9:57 am

      Coba disini om.

  30. ina
    May 21, 2012 at 9:51 pm

    pak de mau tanya dong client server tapi dengan usb, saya dah buat program nya tapi pas dicoba kok ga bisa ya, pake winsock juga kan intinya?

  31. May 25, 2012 at 6:33 pm

    mas, mw tanya..klo chat antar client bsa gk?

    • May 26, 2012 at 10:35 am

      Coba baca artikel lanjutannya disini.

  32. June 4, 2012 at 1:40 am

    blog yang dicari-cari….
    dimana yang lainya menjelaskan sourcr codenya saja….
    sedangkan blog ini menjelaskan source code beserta descripsinya….
    semoga tambah maju….
    wonderfull blog

    • June 4, 2012 at 10:27 am

      Wah double komentar nih, jangan spammer lagi😀

  33. June 12, 2012 at 2:41 pm

    yboot :
    maaas saaya mau nayak neh chat antar Lan Ya?

    • June 12, 2012 at 3:30 pm

      Enggak usah nanya om disini udah banyak samplenya😀.

  34. wendy
    November 23, 2012 at 9:49 pm

    mas…saya kurang mengerti tentang konsep winsock…saya sudah coba aplikasi yang mas buat…sudah bisa berjalan..saya ingin mengembangkan dengan memakai database ms sql server 2000..sudah bisa konek….cuma ketika saya buatkan form login tidak bisa konek..apa mesti di tiap form ada winsock ? dan kalo ada contohnya tentang masalah saya bisa dibantu mas…sekian dan terima kasih

  35. February 22, 2013 at 8:52 am

    Mas Kalo seandainya saya ingin mengirim textbox1.text dan textbox2.text dari server ke textbox1.text dan textbox2.text di client secara bersamaan bagaimana sourcenya?..
    mirip dengan pertanyaan dari saudara Oktama namun saudara Oktama menggunakan 2 button untuk melakukan satu printah…
    maaf masih newbie…

    • February 22, 2013 at 9:44 am

      Ya sama aja, tetap setiap data yang dikirim diberi penanda (tag) yang berbeda agar bisa diolah dari sisi klien.

      Private Sub command1_click()
          winsock1.senddata "1#" & Text1.Text
          winsock1.senddata "2#" & Text2.Text
      End Sub
      
  36. alvin
    August 29, 2013 at 5:38 pm

    pak saya mau tanya yang menentukan kecepatan pengiriman data dari client ke server ato sebaliknya itu terletak pada komponen/bagian mana ya pak

    • September 3, 2013 at 9:53 am

      Ya banyak hal :
      1. Jaringan
      2. Jumlah data yg dikirim
      3. Apa lagi ya … ?😀

  37. cah kalem newbee
    November 13, 2013 at 7:57 am

    wah, mantep..
    salut dengan pemilik bloknya..
    bener2 mau berbagi+beri masukan ke komen2nya>>😀
    om saya mau tanya juga ni,😀
    kalau pengen koneksi ini secara onlain g mana? kalau inikan lewat lan jak, jadi biyar bisa koneksi lewat internet gi mana caranya?
    terimakasih om sebelumny?

    • cah kalem newbee
      November 13, 2013 at 8:00 am

      ada yg kurang pertanyaanya,😀
      saya menggunakan delphi 2010. heee…

  38. March 9, 2014 at 2:07 pm

    bang, kalau komunikasi server client nya terhubung pake jaringan selluler, mksdnya server konek ke modem dan client konek ke modem
    nah biar komunikasi satu sama lain itu gmn?
    soalnya ip dr server kan didapat dari operator selluler dan bersifat random (tidak 127.0.0.1)
    itu gmn bang?
    thx

    • March 10, 2014 at 12:43 pm

      Sudah saya bahas om disini dan sini.

  39. March 9, 2014 at 2:49 pm

    bang pake vb6 ya? eror pek di coba di vb.net T.T

    • March 10, 2014 at 12:41 pm

      Ya di VB .NET sudah punya class sendiri untuk menghandle socketnya jadi enggak pake Winsock lagi.
      Coba googling dengan keyword “vb.net tcp”

  1. April 16, 2014 at 9:12 am
Comments are closed.
%d bloggers like this: