Home > Visual Basic > Belajar Winsock bagian 1 – Intro

Belajar Winsock bagian 1 – Intro

1. Sekilas tentang Winsock

Kita telah mengetahui bahwa komputer membutuhkan sistem operasi agar bisa bekerja. Sistem operasi itu sendiri adalah software. Untuk mengetik, cetak, gambar, semua tugas komputasi membutuhkan software, termasuk juga berkomunikasi dengan komputer lain.

Windows memiliki API (Application Programming Interface) untuk berkomunikasi melalui TCP/IP yang terkenal dengan nama Winsock API. Namun penggunaan API itu sendiri sudah cukup sulit. Microsoft mengerti kebutuhkan para programer dan membuat komponen ActiveX control yang bernama Winsock Control.

Fungsinya mempermudah kita sebagai programer untuk membuat software yang bisa berkomunikasi dengan komputer lain. Dengan Winsock control maka Anda tidak perlu mengetahui secara detail protokol TCP/IP maupun pemanggilan fungsi Winsock API untuk membuat sebuah aplikasi network. Yang perlu Anda lakukan hanyalah mengisi nilai properti, mengeksekusi metode, dan semuanya segera berjalan sesuai skenario (dengan catatan, semua seting network dalam kondisi baik).

2. Protokol-protokok Winsock

Komponen Winsock mempunyai 2 jenis protokol:

  1. TCP – Transmission Control Protocol. Dengan TCP mengharuskan 2 atau lebih komputer yang terhubungan untuk mengirim/menerima data harus dalam kondisi terkoneksi. Jadi dengan menggunakan TCP sangat aman karena data akan selalu dicek sampai atau tidak.
  2. UDP – User Datagram Protocol. Dengan UDP tidak mengharuskan adanya koneksi yang aktif, hanya saja tidak ada jaminan data yang dikirim sampai atau tidak.

Dalam artikel ini saya hanya akan membahas menggunakan protokol TCP

3. Contoh menggunakan Winsock

Winsock mempunyai 2 fungsi dasar, yang pertama mendengarkan fungsi yang masuk :

Private Sub Form_Load()
    With Winsock1
        'set lokal port, misal 21211
        'jangan menggunakan port standar yang sudah digunakan
        'ex : 3306 (MySQL), 3050 (Firebird) de el el
        .LocalPort = 21211

        'listen on this port
        .Listen
    End With
End Sub

ketika ada koneksi masuk event Winsock_ConnectionRequest() akan dijalankan, contoh sederhana untuk menghandle event Winsock_ConnectionRequest() :

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    With Winsock1
        'tutup terlebih dulu, karena jika sebelumnya masih ada koneksi
        'akan menyebabkan error
        .Close

        'requestID mengandung informasi angka unik setiap koneksi yang masuk
        .Accept requestID
    End With
End Sub

Nah sampai disini kita sudah mengetahui cara untuk menghandle koneksi yang masuk, untuk menghandle koneksi keluar ada 2 properties yang perlu kita ketahui yaitu RemoteHost (diisi dengan IP Address komputer target) dan RemotePort (diisi dengan port yang sama pada saat memanggil method .Listen).

Private Sub cmdTesKoneksi_Click()
    With Winsock1
        'ip komputer target
        .RemoteHost = "127.0.0.1"

        'harus sama dengan port pada saat pemanggilan method .Listen
        .RemotePort = 21211

        'start the connection
        .Connect
    End With
End Sub

Selanjutnya permintaan koneksi sudah dilakukan kemudian bagaimana kita mengetahui koneksi tersebut sudah diterima/belum.  Ada 2 method yang bisa melakukan ini yaitu Winsock_Connect dan the Winsock_Error,  dan dari nama methodnya saja saya rasa sudah menjelaskan maksud dan tujuan dari method tersebut.

Private Sub Winsock1_Connect()
    MsgBox "Connected"
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 "Error: " & Description
End Sub

Pembahasan artikel pertama ini akan kita tutup dengan 2 sample program SEDERHANA untuk melakukan koneksi via Winsock. Persiapan yang perlu dilakukan :

  1. Buat project baru
  2. Tambahkan komponen (CTRL + T) Microsoft Winsock Control 6.0 kemudian drag ke form
  3. Drag komponen CommandButton dan set properties Name = cmdTesKoneksi (khusus program klien)

Source code lengkap program pertama (server) :

Private Sub Form_Load()
    With Winsock1
        'set lokal port, misal 21211
        'jangan menggunakan port standar yang sudah digunakan
        'ex : 3306 (MySQL), 3050 (Firebird) de el el
        .LocalPort = 21211

        'listen on this port
        .Listen
    End With
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    With Winsock1
        'tutup terlebih dulu, karena jika sebelumnya masih ada koneksi
        'akan menyebabkan error
        .Close

        'requestID mengandung informasi angka unik setiap koneksi yang masuk
        .Accept requestID
    End With
End Sub

Source code lengkap program kedua (klien) :

Private Sub cmdTesKoneksi_Click()
    With Winsock1
        If .State <> sckClosed Then .Close

        'ip komputer target - server
        .RemoteHost = "127.0.0.1"

        'harus sama dengan port pada saat pemanggilan method .Listen program server
        .RemotePort = 21211

        'start the connection
        .Connect
    End With
End Sub

Private Sub Winsock1_Connect()
    MsgBox "Connected"
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 "Error: " & Description
End Sub

Jika sudah jalankan kedua program tersebut kemudian klik tombol cmdTesKoneksi, dan kita akan mendapatkan pesan “Connected” yang artinya kita sudah berhasil membuat aplikasi sederhana untuk melakukan koneksi menggunakan Winsock.

Artikel berikutnya insya Alloh dengan judul Belajar Winsock bagian 2 – Membuat aplikasi chat sederhana 1:1 segera menyusul.

Selamat mencoba :)

Referensi :

  1. http://www.winsockvb.com sayangnya situs ini sekarang sudah offline
  2. Tugas Akhir saya membuat billing warnet di bla bla
  1. February 5, 2010 at 10:13 am | #1

    Salut konsistensi penulisan code disertai comment yang informatifnya mas.. (Dua Jempol)

  2. February 6, 2010 at 12:16 am | #2

    akhirudin :

    Salut konsistensi penulisan code disertai comment yang informatifnya mas.. (Dua Jempol)

    :-) Tq

  3. jimo
    February 25, 2010 at 9:28 am | #3

    keren mas…
    makasih bngt wat ilmunya…

    salah satu amalan yang tokcer adalah ilmu yang bermanfaat mas :)

    tetep berkarya mas!!!

  4. February 25, 2010 at 9:36 am | #4

    jimo :

    keren mas…
    makasih bngt wat ilmunya…

    salah satu amalan yang tokcer adalah ilmu yang bermanfaat mas :)

    tetep berkarya mas!!!

    :smile:

  5. May 15, 2010 at 8:54 pm | #5

    wah mantab pak dosen..
    terusin donk tutorial winsocknya sampe tuntas :D
    saya jadi kepingin ngelanjutin bikin billing yg gagal.. hehehehe..

    dulu saya malah belajar winsock dari pemrograman trojan, tapi ga ngerti2 hahahaha..

  6. May 17, 2010 at 1:04 am | #6

    wah adah om irzan, tutorial winsocknya udha tuntas kok om :D

  7. May 17, 2010 at 8:01 am | #7

    hehehehe.. iyah saya uda baca sampe yang bagian buat VPN ajah.. dari situ udah mulai pusing.. hehehehehe..

  8. May 17, 2010 at 9:05 am | #8

    Biar enggak pusing bacanya jangan terlalu mendalam om :D

  9. agung
    June 1, 2010 at 10:36 am | #9

    salam kenal..wah banyak sekali ilmu yg saya dapat dari sini..mksh mas.
    oiya mas alamat source code billing warnetx yg bla bla dmn mas??mksh

  10. June 2, 2010 at 1:39 am | #10

    agung :

    salam kenal..wah banyak sekali ilmu yg saya dapat dari sini..mksh mas.
    oiya mas alamat source code billing warnetx yg bla bla dmn mas??mksh

    Alamat sourcenya tersimpan di cd tugas akhir saya n kayaxnya udah jamuran :D , tapi klo cuma bwt sample billing warnet coba main-main keSINI

  11. omega 3
    June 9, 2010 at 11:22 pm | #11

    like this

  12. agung
    June 17, 2010 at 4:59 am | #12

    mantaf linkx semantab blog ini..mksh mas..

  13. June 17, 2010 at 6:44 am | #13

    agung :

    mantaf linkx semantab blog ini..mksh mas..

    Sama2x mas :)

  14. Teger
    July 13, 2010 at 4:04 pm | #14

    boleh share link buat download VB nx ga?
    lg mau belajar nih…

    • July 14, 2010 at 12:48 am | #15

      Terlalu gede om nyampe 500 mban, emang kuat downloadnya ? Di rentalan cd banyak kok.

      • Teger
        July 14, 2010 at 4:23 pm | #16

        ga pa2 koq om admin. coz wa lg dpedalaman nih.hiks…ga ada rental2an dsini.

        please y..
        btw, output com winshock itu berupa file ky .bat/.dll ato ky apa? msh awam sm vb.

  15. July 15, 2010 at 3:35 am | #17

    Teger :

    ga pa2 koq om admin. coz wa lg dpedalaman nih.hiks…ga ada rental2an dsini.

    please y..

    coba link ini :
    http://hotfile.com/dl/46067250/808d86b/Visual_Studio_Visual_Basic_6.0.exe.html

    btw, output com winshock itu berupa file ky .bat/.dll ato ky apa? msh awam sm vb.

    Winsock itu komponen bawaan vb 6 sama seperti komponen lainnya (TextBox, CommandButton de el el)

  16. amad
    August 30, 2010 at 3:17 am | #18

    keeeereen sip bagus maz hehe….

  17. hahns
    September 16, 2010 at 5:56 am | #19

    terima kasih Mas…
    Wah, bener2 ngebantu banget…

  18. September 17, 2010 at 6:34 am | #20

    amad :

    keeeereen sip bagus maz hehe….

    hahns :

    terima kasih Mas…
    Wah, bener2 ngebantu banget…

    Oke sama2x om :smile:

  19. November 6, 2010 at 2:14 pm | #21

    mas, mau tanya nih… klo di VS2008 pake VB08, klo mau pake kaya winsock gimana ya? adakah tutorial lain mungkin? makasih.. :)

  20. November 11, 2010 at 6:55 am | #23

    Mau nanya mas, kalau misalnya kita mo buat IP yang terdaftar itu untuk RemoteHOst biar otomatis gimana? misalnya begitu dia buka aplikasi clien dan klik connect, otomatis IPnya sudah tercatat. Kalau seperti contoh ini kan IP dicatat manual dalam script.

    Maaf, masih baru dengan VB
    terima kasih

  21. November 12, 2010 at 4:31 am | #24

    gampang om, gini aja :
    1. Tambahkan 1 textbox untuk menginputkan ip address, misal dg nama txtIPAddress

    2. Lakukan revisi kode pd saat melakukan koneksi

    Private Sub cmdConnect_Click()
        ' disini perintah untuk melakukan koneksi
        ' lihat sample kode diatas
        
        ' kode baru untuk menyimpan ip remote host, di registry windows
        Call SaveSetting("MyAPP", "RemoteHost", "IPAddress", txtIPAddress.Text)
    End Sub
    

    Hasil perintah SaveSetting diatas akan tersimpan disini

    3. Terakhir pada event form load, tambahkan kode berikut :

    Private Sub Form_Load()
        ' menampilkan ip address yang sudah diinputkan
        txtIPAddress.Text = GetSetting("MyAPP", "RemoteHost", "IPAddress")
    End Sub
    

    Selamat mencoba :)

  22. November 13, 2010 at 1:30 am | #25

    mau nanya mas, kalau aplikasi diatas status nya kita balik bisa nggak mas, jadi pada aplikasi client nya kita isi script untuk server dan sebalik nya,(saya ingin membuat sebuah aplikasi server untuk membroadcast sebuah file ke semua client nya caranya gimana ya mas?) jadi sesuai yang saya harapkan, ketika saya melakukan klik pada tombol cmdconnect maka aplikasi ini terkoneksi tidak hanya pada 1 komputer melainkan banyak komputer? mohon bantuannya mas. :)

    • November 13, 2010 at 2:43 am | #26

      Yg jelas bisa om, karena sy sendiri sudah mempraktikkan cara ini, cuma untuk kirim file via winsocknya yg belum sy coba.

      Tapi sy punya solusi lain yang mudah untuk kirim2xan filenya :D , yaitu dengan memanfaatkan service FTP.

      Sy share dikit nih, kebetulan beberapa waktu lalu sy menghandle aplikasi dalam jumlah banyak, tepatnya 52 klien :D kebayang enggak tuh klo terjadi update program dan sy harus mengupdate satu2x bisa2x nangis deh :cry: :D

      Jadi cara yg sy lakukan adalah dg meletakan file updatenya di server, trus mengirimkan command/perintah via winsock ke masing2x klien untuk mendownload file updateannya via FTP.

      Kenapa tidak menggunakan folder sharing, karena folder sharing kadang2 sering gagal diakses dari komputer lain, jadi lebih aman menggunakan FTP.

      Untuk kode program winsocknya seperti yg om perkirakan sebelumnya tinggal dibalik aja, aplikasi server -> klien.

      Selamat mencoba :)

  23. November 14, 2010 at 2:07 am | #27

    maaf mas kalau tidak keberatan saya bisa minta script untuk mengirimkan command/perintah via winsock ke masing2x klien dalam sekali kirim nggak?, serta script yang ada di client nya untuk menanggapi command/perintah yang dikirimkan oleh server. pada aplikasi yang mas buat untuk update program diatas. :)
    sebelum nya saya minta maaf mas kalau mungkin terlalu banyak minta tolong, mohon bantuannya mas, tapi kalau mas keberatan tidak apa2 itu hak mas. :)
    e-mail saya: mypc.kom@gmail.com

    • November 14, 2010 at 4:10 am | #28

      Loh enggak ada yg beda om dengan skrip untuk koneksinya (tinggal panggil method Connect) dan ngirim perintah (method SendData) coba baca lagi artikel yg kedua.
      Yang jelas urutannya seperti ini om :
      1. simpan daftar ip kliennya bisa di database atw menggunakan array
      2. load winsock array sebanyak jumlah klien
      3. lakukan perulangan sebanyak jumlah ip klien
      4. lakukan koneksi (method Connect), jika sukses langsung kirim data (method SendData)

      entar deh klo sy sempat insya Allah sy buatkan samplenya :D

  24. November 14, 2010 at 10:33 am | #29

    ya makasih mas. maaf kalau terlalu merepotkan :)

  25. Dimas Aritona
    January 12, 2011 at 4:16 pm | #31

    bro, ada ga script winsocx-nya untuk vb.net, saya upgrage source code nya banyak yang error ya, thx

  26. April 12, 2011 at 11:04 am | #33

    kalo pake UDP gimana? untuk terima datanya? adakah perbedaan signifikan di kedua protokol dengan menggunakan winsock?

    • April 12, 2011 at 1:33 pm | #34

      Sy belum pernah coba om, klo enggak salah game2x online biasanya menggunakan protokol UDP (CMIIW)

  27. Protol
    May 17, 2011 at 11:36 am | #35

    Pak,kalo sy mw c0ntrol mik0n via winsock bs?
    Ada scriptny pak?sy msh bru ne. .he

  28. May 19, 2011 at 11:30 am | #37

    mikrokontroler om..
    ada ym ga om… saya mw chat2 ma om… belajar winsock.. untuk kontrol mikon ane lewat remote TCp/ip

    • May 19, 2011 at 11:42 am | #38

      Waduh sy bukan anak informatika om, lom pernah belajar mikrokontroler :D .

      Setau sy klo ngakses barang gituan mah pakenya MsComm bukan winsock

      CMIIW :D

  29. May 19, 2011 at 12:45 pm | #39

    y om… mikrokontroler maenan anak elektro om.. :p
    yup bener banged om.. MS COMM.. itu kan dari PC ke alat om.. yang saya ingin PC to PC agar PC server bisa akses alat tersebut via PC client gitu..

    • May 19, 2011 at 1:19 pm | #40

      Emang perangkatnya si om udah bisa di ping dari clien ?

  30. May 19, 2011 at 1:58 pm | #41

    perangkat saya sudah bisa pin lewat client om.. saya pake VB untuk kontrol nya.. tapi belum saya koneksikan internet.. niat saya ingin koneksi dengan internet… dan saya baca2 winsock kyknya bisa.. hmm.. yman om,..

    • May 19, 2011 at 2:05 pm | #42

      Nah itu dah bisa, kok nanya2x winsock lagi?

  31. May 19, 2011 at 4:36 pm | #43

    saya baru baca tentang winsock disini om… T_T
    belum bisa cara koneksiin PC ke PC yang lainnya….
    bingunk caranya….

  32. May 21, 2011 at 7:49 pm | #45

    wah…. mas ni… :D
    hmm.. saya coba add componen di vb koq ga ada component winsock y mas??
    oia, winsock ini bisa remote juga ato ga? seperti misalnya mengendalikan client gitu?

    • May 22, 2011 at 12:23 am | #46

      Ada kok om, winsock itu komponen standar vb 6 namanya “Microsoft Winsock Control 6.0″
      dulu sy pernah dapat sourcenya untuk remote desktop sederhana tp sekarang udah enggak tau ngilang ke mana :D

  33. May 22, 2011 at 7:12 am | #47

    gag ada om…. hmm.. aneh makanya
    oia, winsock itu harus di PC ato di laptop jg bsa?

    ane semalem cari2 ga ada winsock di vb komponennya.. T_T
    walah…. namanya remote desktop gt??
    itu ntar fungsinya gmn tuh?

    • May 23, 2011 at 8:47 am | #48

      Coba ganti installer om, yg jelas untuk pc laptop sm aja
      Remote Dekstop masa’ enggak tau sih om ?
      Contoh aplikasinya seperti radmin, net support, vnc, teamviewer

  34. AS
    August 30, 2011 at 2:47 am | #49

    DI KOM ANE KO GAK ADA WINSHOCKNYA KNP Y?

    • August 30, 2011 at 11:02 am | #50

      Ya enggak mungkin om pasti ada, cuma harus diadd secara manual ke toolbox
      menu Project -> Components trus aktifkan pilihan komponen Microsoft Winsock Control 6.0

  35. terry
    October 14, 2011 at 7:53 am | #51

    saya mo nanya mas…
    kalo membuka desktop client gimana caranya mas…
    misalnya program client merupakan program yang menutup seluruh layar desktop…
    dah nyambung kalo diping…tapi alur pengerjaannya masih bingung saya…
    tolong mas…lg dikejar2 ama skripsi ini…plis…

    • October 14, 2011 at 10:22 am | #52

      Mau bikin billing ya om ? Klo iya silahkan coba sample disini.

  36. terry
    October 14, 2011 at 8:02 pm | #53

    hehehe kok tau masbro…
    stress gw dah sebulan ini…makasih linknya ya masbro…bener2 terbantu gw ne…

    • October 15, 2011 at 1:45 am | #54

      Soalnya udah banyak pertanyaan yg mirip gitu om :D

  37. terry
    October 14, 2011 at 8:38 pm | #55

    eh kok bahasa c# semua ini mas…gak ada yg bahasa vb6 codingnya…tinggal sentuhan terakhir ini…membuka form client yg menutupi desktop…

  38. Tiara
    January 17, 2012 at 3:01 pm | #57

    hubungkan kedua komputernya gimana om??

  39. January 30, 2012 at 9:21 am | #59

    om admin saya maw tanya , jumlah maksimum klient yang dapat diterima winsock berapa om? terimakasih sebelumnya… :)

  40. March 20, 2012 at 3:21 pm | #63

    wah lengkap detail jelas … thank infonya …

  41. March 22, 2012 at 9:44 am | #65

    Kesasar di blog ini, subhanallah banyak banget manfaatnya

    • March 22, 2012 at 10:55 am | #66

      Yang penting jangan lupa say hello om :)

  42. March 22, 2012 at 10:18 am | #67

    mas, mau tanya : untuk di Serever kita gunakan Form Server ya ? yg client kita install di komp client kan mas ? dengan syarat dalam bentuk .exe . mohon bantuan nya mas. saya buat aplikasi magang nih :D

    • March 22, 2012 at 10:56 am | #68

      Iya seperti itu, tapi klo bisa dicoba dilokalan dulu sebelum dites antar komputer

  43. April 9, 2012 at 10:49 am | #69

    ini yang jaku cari … sip !

  1. October 5, 2011 at 9:12 am | #1

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s