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:
- 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.
- 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 :
- Buat project baru
- Tambahkan komponen (CTRL + T) Microsoft Winsock Control 6.0 kemudian drag ke form
- 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 :
- http://www.winsockvb.com sayangnya situs ini sekarang sudah offline
- Tugas Akhir saya membuat billing warnet di bla bla





Salut konsistensi penulisan code disertai comment yang informatifnya mas.. (Dua Jempol)
keren mas…
makasih bngt wat ilmunya…
salah satu amalan yang tokcer adalah ilmu yang bermanfaat mas
tetep berkarya mas!!!
wah mantab pak dosen..
terusin donk tutorial winsocknya sampe tuntas
saya jadi kepingin ngelanjutin bikin billing yg gagal.. hehehehe..
dulu saya malah belajar winsock dari pemrograman trojan, tapi ga ngerti2 hahahaha..
wah adah om irzan, tutorial winsocknya udha tuntas kok om
hehehehe.. iyah saya uda baca sampe yang bagian buat VPN ajah.. dari situ udah mulai pusing.. hehehehehe..
Biar enggak pusing bacanya jangan terlalu mendalam om
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
, tapi klo cuma bwt sample billing warnet coba main-main keSINI
like this
mantaf linkx semantab blog ini..mksh mas..
Sama2x mas
boleh share link buat download VB nx ga?
lg mau belajar nih…
Terlalu gede om nyampe 500 mban, emang kuat downloadnya ? Di rentalan cd banyak kok.
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.
coba link ini :
http://hotfile.com/dl/46067250/808d86b/Visual_Studio_Visual_Basic_6.0.exe.html
Winsock itu komponen bawaan vb 6 sama seperti komponen lainnya (TextBox, CommandButton de el el)
keeeereen sip bagus maz hehe….
terima kasih Mas…
Wah, bener2 ngebantu banget…
Oke sama2x om
mas, mau tanya nih… klo di VS2008 pake VB08, klo mau pake kaya winsock gimana ya? adakah tutorial lain mungkin? makasih..
Klo di .NET udah ada library penggantinya coba disini dan sini.
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
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 SubHasil 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 SubSelamat mencoba
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.
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
, yaitu dengan memanfaatkan service FTP.
Sy share dikit nih, kebetulan beberapa waktu lalu sy menghandle aplikasi dalam jumlah banyak, tepatnya 52 klien
kebayang enggak tuh klo terjadi update program dan sy harus mengupdate satu2x bisa2x nangis deh
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
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
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
ya makasih mas. maaf kalau terlalu merepotkan
Server
Klien
dan ini om sourcenya, mudah2xan bs membantu
bro, ada ga script winsocx-nya untuk vb.net, saya upgrage source code nya banyak yang error ya, thx
Untuk vb.net sudah ada library socketnya om, coba link dibawah ini :
1. VB.NET Socket Programming
2. VB.NET TCP Client – Server Socket Communications
Selamat mencoba
kalo pake UDP gimana? untuk terima datanya? adakah perbedaan signifikan di kedua protokol dengan menggunakan winsock?
Sy belum pernah coba om, klo enggak salah game2x online biasanya menggunakan protokol UDP (CMIIW)
Pak,kalo sy mw c0ntrol mik0n via winsock bs?
Ada scriptny pak?sy msh bru ne. .he
Apaan tuh om mikon ?
mikrokontroler om..
ada ym ga om… saya mw chat2 ma om… belajar winsock.. untuk kontrol mikon ane lewat remote TCp/ip
Waduh sy bukan anak informatika om, lom pernah belajar mikrokontroler
.
Setau sy klo ngakses barang gituan mah pakenya MsComm bukan winsock
CMIIW
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..
Emang perangkatnya si om udah bisa di ping dari clien ?
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,..
Nah itu dah bisa, kok nanya2x winsock lagi?
saya baru baca tentang winsock disini om… T_T
belum bisa cara koneksiin PC ke PC yang lainnya….
bingunk caranya….
Oke om semangat yo
wah…. mas ni…
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?
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
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?
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
DI KOM ANE KO GAK ADA WINSHOCKNYA KNP Y?
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
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…
Mau bikin billing ya om ? Klo iya silahkan coba sample disini.
hehehe kok tau masbro…
stress gw dah sebulan ini…makasih linknya ya masbro…bener2 terbantu gw ne…
Soalnya udah banyak pertanyaan yg mirip gitu om
eh kok bahasa c# semua ini mas…gak ada yg bahasa vb6 codingnya…tinggal sentuhan terakhir ini…membuka form client yg menutupi desktop…
Setau sy sample bilingnya menggunakan VB6 om.
hubungkan kedua komputernya gimana om??
Ya pake kabel lan/wifi mba
om admin saya maw tanya , jumlah maksimum klient yang dapat diterima winsock berapa om? terimakasih sebelumnya…
Coba link ini om.
terimakasih berat om info nya,,,, Do the Best terus lah,,,
Sama2x om
wah lengkap detail jelas … thank infonya …
Oke sama-sama om
Kesasar di blog ini, subhanallah banyak banget manfaatnya
Yang penting jangan lupa say hello om
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
Iya seperti itu, tapi klo bisa dicoba dilokalan dulu sebelum dites antar komputer
ini yang jaku cari … sip !
Siip juga om udah mau mampir disini