Belajar Winsock bagian akhir – Contoh kasus mengakses data stok barang dari luar
Akhirnya rilis juga artikel terakhir dari 5 seri belajar winsock ini, sebelum kita melanjutkan pembahasan ada baiknya kita melakukan sedikit review :
- Dasar-dasar penggunaan winsock sudah kita pelajari
- Ini terbukti dengan suksesnya kita membuat aplikasi chat sederhana
- Di tambah lagi ada teman kita yang mau nebeng sehingga terciptanya aplikasi chat multiple connection
- Jalan tol antara laptop mas Paijo dan komputer server tokonya juga udah selesai dibangun dengan anggaran 0 Rp
Berarti sekarang waktu yang tepat untuk mencoba ketangguhan mas Win (maksudnya Winsock
) kalo lari jarak dekat (jaringan LAN) masih bisa diandalkan, bagai mana dengan lari jarak jauh (via internet) apakah juga masih bisa diandalkan ?
Objek-objek yang akan dijadikan korban untuk uji coba kali ini :
- Database barang dengan format ms access
- Aplikasi server
- Aplikasi klien
Data yang dikirim dari server dibatasi maksimal 1024 karakter dalam sekali kirim, otomatis jika data > 1024 akan dipecah menjadi beberapa paket, berikut cuplikan kodenya (server) :
Option Explicit
Private Const LOCAL_PORT As Long = 1007
Private Const REC_SPR As String * 1 = "|" 'separator baris
Private Const FLD_SPR As String * 1 = "#" 'separator kolom
Private Const MAX_LIMIT As Long = 1024 '1x kirim dibatasi 1 kb, kalo untuk jaringan lokal masih bisa set 4096
Private Function pembulatanKeAtas(ByVal X As Double, Optional ByVal Factor As Double = 1) As Double
Dim temp As Double
temp = Int(X * Factor)
pembulatanKeAtas = (temp + IIf(X = temp, 0, 1)) / Factor
End Function
Private Function getDataBarang(ByVal param As String) As String()
Dim rs As ADODB.Recordset
Dim div As Long
Dim lengthData As Long
Dim n As Long
Dim i As Long
Dim tmp As String
Dim arrTmp() As String
strSql = "SELECT UCASE(nama), harga, stok FROM barang " & param & ""
Set rs = openRecordset(strSql)
If Not rs.EOF Then
For i = 1 To getRecordCount(rs)
tmp = tmp & rs(0).Value & FLD_SPR & rs(1).Value & FLD_SPR & rs(2).Value & REC_SPR
rs.MoveNext
Next i
If Len(tmp) > 0 Then tmp = Left(tmp, Len(tmp) - 1)
'karakter ~ sebagai penanda awal dan akhir data
'untuk memudahkan pengecekan di klien bahwa data yg diterima sudah lengkap/belum
'ex : ~DATA BARANG + SEPARATOR KOLOM DAN BARIS~
'contoh format data disini ada 2 :
'1. jika data <= 1024 karakter : ~~DATA BARANG + SEPARATOR KOLOM DAN BARIS
'2. jika data > 1024 karakter : ~DATA BARANG + SEPARATOR KOLOM DAN BARIS~
If Len(tmp) > 0 Then tmp = "~" & Left(tmp, Len(tmp) - 1) & "~"
If Not Len(tmp) > MAX_LIMIT Then
tmp = Left(tmp, Len(tmp) - 1)
tmp = "~" & tmp
End If
lengthData = Len(tmp)
If lengthData > 0 Then
If lengthData > MAX_LIMIT Then 'data > 1024 karakter
'data dibuat menjadi beberapa package
'ex : jika jumlah karakter 2345
' package 1 -> 1024
' package 2 -> 1024
' package 3 -> 297
' berarti data yg dikirim ke klien sebanyak 3 x
div = pembulatanKeAtas(lengthData / MAX_LIMIT)
ReDim arrTmp(div)
n = 1
For i = 1 To div
arrTmp(i - 1) = Mid(tmp, n, MAX_LIMIT)
n = n + MAX_LIMIT
Next i
Else
ReDim arrTmp(0)
arrTmp(0) = tmp
End If
Else
ReDim arrTmp(0)
arrTmp(0) = tmp
End If
Else
ReDim arrTmp(0)
arrTmp(0) = "EOF" 'data barang tidak ditemukan
End If
Call closeRecordset(rs)
getDataBarang = arrTmp
End Function
pengiriman data ke klien akan dihandle oleh event DataArrival :
Private Sub Socket_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim i As Long
Dim strData As String
Dim ret As Boolean
Dim arrTmp() As String
'On Error GoTo errHandle
' Grab the data from the specified Winsock object, and pass it to the parent.
Call Socket(Index).GetData(strData)
DoEvents
arrTmp = getDataBarang(strData)
For i = LBound(arrTmp) To UBound(arrTmp)
If Len(arrTmp(i)) > 0 Then ret = send(Index, arrTmp(i))
Next i
Exit Sub
errHandle:
Call Socket(Index).Close
End Sub
sedangkan untuk aplikasi klien bagian yg bertugas menerima data masih di event yang sama yaitu DataArrival :
Private Sub Socket_DataArrival(ByVal bytesTotal As Long)
Dim dataMasuk As String
'On Error Resume Next
Socket.GetData dataMasuk
If Left(dataMasuk, 2) = "~~" Then 'package data <= 1024
Call execOutput(dataMasuk)
ElseIf dataMasuk = "EOF" Then 'data tidak ditemukan
Call execOutput(dataMasuk)
Else
'package data > 1024
'berikut kode untuk penggabungan package data
tmp = tmp & dataMasuk
If InStr(1, dataMasuk, "~") > 0 Then packageHdr = packageHdr & "~"
If Len(packageHdr) = 2 Then Call execOutput(tmp) 'penggabungan package data selesai
End If
End Sub
dan ini prosedure yang bertanggung jawab untuk memparsing data dan menampilkan ke ListView :
Private Sub execOutput(ByVal data As String)
Dim rec() As String
Dim fld() As String
Dim x As Long
Dim noUrut As Long
On Error GoTo errHandle
Screen.MousePointer = vbHourglass
DoEvents
If Left(data, 2) = "~~" Then 'complete
data = Replace(data, "~~", "")
ElseIf data = "EOF" Then
'do nothing
Else
data = Left(data, Len(data) - 1) 'remove ~ left
data = Right(data, Len(data) - 1) 'remove ~ right
End If
lsvBarang.ListItems.Clear
If data = "EOF" Then
Screen.MousePointer = vbDefault
MsgBox "Data barang dengan keyword '" & txtNamaBarang.Text & "' tidak ditemukan", vbInformation, "Informasi"
Else
'contoh data :
'~~SUSU KEDELAI ABC 200M#1000#24|SUSU KEDELAI MELILEA 500#1000#0|KOPI SUSU KPL API 3P#1000#0|SUSU KEDELAI ABC 200#1000#2
'| -> pemisah baris
'# -> pemisah kolom
rec = Split(data, REC_SPR)
With lsvBarang
noUrut = 1
For x = LBound(rec) To UBound(rec)
fld = Split(rec(x), FLD_SPR)
.ListItems.Add , , noUrut
.ListItems(noUrut).SubItems(1) = fld(0) 'nama barang
.ListItems(noUrut).SubItems(2) = FormatNumber(fld(1), 0) 'harga
.ListItems(noUrut).SubItems(3) = fld(2) 'stok
noUrut = noUrut + 1
Next x
End With
End If
Screen.MousePointer = vbDefault
Exit Sub
errHandle:
Screen.MousePointer = vbDefault
End Sub
dan ini hasilnya
mas Paijo mengetikan keyword mie kemudian mengirimkannya ke server dan akan diproses dengan hasil rincian sbb :
- Jumlah record yang ditemukan sebanyak 181 record
- Jumlah karakter nama barang + harga + stok + seperator = 5084 karakter dan dikirim menjadi beberapa paket
- Hasil akhir klien juga menampilkan sebanyak 181 record, yang berarti bahwa uji coba kita berhasil
Dan yang terpenting dari pembahasan ini, sample programnya bisa didownload disini
Selamat mencoba






mas sharing filenya di indowebster aja ato klo metok2nya di ziddu aja
lemot bngt di 4shared…
btw, thanks berat atas ilmunya mas
tetap berkarya!!!
Oke mas Jimoe thank atas sarannya, akan saya pertimbangkan untuk mencari lokasi kos2xan yang baru
Kalau saya, disimpan dimanapun OK. Trims atas file-filenya.
Oke sama2 mas
Mantep lah Kang! Lanjutkan! ^.^
Tapi,, ini kan di VB6 ya? kalau programnya VB. Net (05/08) bedanya apanya ya Kang? Jgn2 smwnya diganti,, coz kan beda bgt scriptnya juga,. Ada script VB. Net 05/08 untuk Winsock/cSocketMasternya gag Kang? Coz dpake bgt bwt project ne,, sya pakenya yg .Net soalnya,. Mkasih Kang!
Kan di VB.NET ada fitur upgradenya jadi tinggal open aja project vb6, walaupun hasil upgradenya enggak 100% berhasil jadi sisanya diedit manual terutama yang berhubungan dengan fungsi api.
Untuk referensi mungkin bisa baca buku UPGRADING Microsoft Visual Basic 6.0 To Microsoft Visual Basic .NET.
Selamat mencoba
Kalau konkesi menggunakan Internet VPN atau pakai IP publik so oke..bisa nggak om mengulas memakai dial up lewat jaringan telp, dengan asumsi sewaktu mengirim data dial terlebih dahulu..thanks berat atas infonya
Thank mas yudhi atas masukannya, sy mungkin agak kesulitan mencobanya karena belum punya perangkat telp rumah
.
Trus mengenai dialup dulu ini, maksudnya seperti mau ngirim fax atau gimana? Pertanyaannya masih belum jelas.
Nice info mas…
Btw linknya dah mati mas, bisa upload lagi? thx before
Oke mas linknya udah aktif lagi, silahkan lanjut download
thx ya mas dah bagi2 ilmunya…
Oke sama2x
mas source code buat coneksi nya mana?????
Dicek aja om yg lebih teliti, yang jelas kode untuk koneksi winsock dan databasenya sudah ada di sample programnya.
mas, link untuk download source nya mati, bisa tolong d upload di server lain? saya sedang butuh untuk lengkapin modul tugas akhir saya, thank’s b4 mas.
Saya baru cek linknya berfungsi kok, silahkan dicoba lagi.
mas, saya sudah download sample winsock 4 nya.. thx,
mas saya mau tanya,kasus saya :
saya membangun program sistem rfid dengan vb6 database mysql dengan interface phpmyadmin. yang saya mau tanyakan :
apakah database pada satu node pc bisa digunakan oleh program pada pc lain? (pc terhubung ke jaringan).kalau bisa bagaimana cara koneksinya? mohon pencerahannya..sebelumnya saya sudah membuat koneksi vb dngan mysql tetapi pada computer yang sama.
Yang jelas bisa hanya saja privilage user mysqlnya harus diatur untuk bisa login dari pc lain, untuk masalah ini coba mampir ke SINI.
untuk koneksinya ya sama seperti konek lokal tinggal ganti attribut SERVERnya :
DRIVER={MySQL ODBC 5.1 Driver};SERVER=IP_KOMPUTER;DATABASE=nama_db;UID=user_mysql;PWD=pass_mysql;OPTION=3mas qu cuman mau tanya nih,,
program VB 6 qu ko komponennya banyk yg ga bisa ya, begitu ingin ku tmmbahin ke form malah muncul seperti ini:
“License information for this component not found.You do not have an aproppriate license to use this functionality in the design environment”
itu knp ya mas??
terima kasih
Penyebabnya bisa saja :
1. Waktu nginstall VBnya pake cd installer khusus VB, sy dengar cd installer khusus VB sering bermasalah sebaiknya pake cd installer Visual Studio
2. Nama komponennya apa ya? DBGrid bukan ? Klo iya coba cek file dg ekstensi .reg di cd installer vbnya trus dijalankan. File tersebut biasanya 1 folder dg file ocxnya.
mas makaasih banget buat artikelnya yah, sangat membantu dalam pengerjaan tugas saya.
nice info
Oke sama2x
mas saya mo tanya kalo membuat aplikasi chating multiprotokol menggunakan ajax gimana y?saya sudah banyak tanya ksana sini tapi banyak g msh kurang mngerti.klo mas tw gimana ya mas cara&scriptnya?.klo mo blz kemail saya jg gpp.makasih sbelumnya
Wah sory sekali mba, sy belom pernah coding menggunakan ajax.
Kebetulan proyek sy selama ini desktop semua
artikel bagus & bermanfaat sy udah nyicipin…!! yach membantu lah..! tp kalo untuk kita bisa input barang yang baru kodenya gimana yach bos ??
Nyicipin, makanan kaleee he he he
Konsepnya masih sama kok om, tinggal buat aja command/keyword khusus pada saat mengirim ke server. ex :
Nah di aplikasi server kan ada pengecekan data yang masuk, jika diawali dg keyword ins berarti perintah untuk menginputkan data baru (tentunya data diatas harus diparsing terlebih dulu).
Selamat mencoba
sampel codenya gak bisa didownload di 4shared mas…
bisa diupdate?
trims
Oke om tq infonya, silahkan dicoba lagi.
mas, thanks banget ea, kebetulan aq mw belajar bikin billing warnet, mungkin dengan winsock akan sangat membantu.
tapi mas klo ada boleh donk tutorial program billing warnet, klo bisa dari VB dan Delphi mas, aq masih newbie di dunia pemrograman, tapi mw belajar. hehe
nanti tolong dikirim via email ea mas, si_ip3y@yahoo.com
thanks info’y…!
sukses terus ea buat mas’y….
Masih newbie ya om ? Setau sy ilmu itu didatangi bukan mendatangi.
Ini ada sample billing warnet, silahkan dioprek.
Maaf Om… Koreksi Link donlot nya…
yang di atas gak bisa…
tapi sy nemu yg ini..
“www.4shared.com/file/Ss6tARNZ/Winsock4.htm”
Ok om, tq infonya
tapi udah sy coba masih linknya masih bisa kok
mas,,,mw nanya,,klu untuk menampilkan data pada klien,,tp dari Tabel yg berbeda,,,
yg ada skrng kan untuk cek stock barang [ mis. TBLSTOCK ],,,klu misalnya d tmbahkan untuk cek hasil penjualan [ mis. TBLJUAL ],,,g mna cara.x,,,? mohon bantuan.x,,,
thank’s b4…
Revisi aplikasi server :
1. Tambah fungsi baru di aplikasi servernya misal dengan nama getDataPenjualan yg tugasnya untuk melakukan query ke tbljual, jd om tinggal modif aja fungsi getDataBarang
2. Untuk event Socket_DataArrival, harus ditambahkan kondisi untuk mengecek perintah yg dikirim dari klien. ex :
rivate Sub Socket_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim i As Long Dim strData As String Dim ret As Boolean Dim arrTmp() As String Dim param() As String On Error GoTo errHandle ' Grab the data from the specified Winsock object, and pass it to the parent. Call Socket(Index).GetData(strData) DoEvents 'contoh isi strData: ' barang#datang barang dicari ' 0 1 ' jual#tanggal1#tanggal2 ' 0 1 2 param = Split(strData, "#") Select Case param(0) Case "barang" arrTmp = getDataBarang(param(1)) Case "jual" arrTmp = getDataPenjualan(param(1), param(2)) End Select For i = LBound(arrTmp) To UBound(arrTmp) If Len(arrTmp(i)) > 0 Then ret = send(Index, arrTmp(i)) End If Next i Exit Sub errHandle: Call Socket(Index).Close End SubRevisi aplikasi klien :
Waktu ngirim data ditambahkan keyword, misal :
1. untuk data barang : barang#datang barang dicari
2. untuk data penjualan : jual#tanggal1#tanggal2
Selamat mencoba
mas, mau nanya tentang winsock, kalau diimplementasikan di windows mobile apakah bisa running seperti running di desktop atau pakai komponen apa yang semacam winsock untuk windows mobile, terima kasih.
Malam mas,,sya mo tanya klo mo ambil jam dari server tapi DB pke MsAccess gmana y caranya at codingnya??n itu bebanin kinerja databasenya g??
Enggak usah dari aksesnya om, tinggal gini aja klo mau ngambil tanggal server :
btw code di atas pke componen Winsock mz??
Iya om untuk ngirim ke kliennya pake winsock, bukannya ini membahas winsock om
mz ttp g bsa tu,, ada contoh projectnya g ambil timer server pke winsock??btw kmrn ak dah dpet artikel ambil timer dari server tpi timer pasiv n pke protokol UDP jadi msih krang memuaskan..sblmnya thanx y mz ats jawabannya
Jadi kyak contoh Winsock4,,Server Listening trus Klien yang aktif ambil data gtu mz
Dicoba dulu om semua artikel sy yg berhubungan dengan winsock, itu sudah mengcover semua pertanyaan om.
mas q mo tanya apa winsock di vb 6.0 untuk koneksinya memang terbatas untuk jaringan perr to perr apa nggak.klo enggak apa tolls tambahannya. bisa nggak q minta contoh pengujian tentang winsock di vb 6.0 klo bener2 hanya trbatas pada jaringan perr to perr.thanks sebelumnya.
Enggak om, yg penting komputer yg digunakan untuk mencoba program winsocknya harus sudah terhubung.
Si om sendiri lah yg harus nguji, contoh program sudah ada tinggal luangkan waktu untuk mencoba.
om mau tanya , kalau di buat user yang bisa di ganti settingan port dan ip addres nya untuk user, gimana cara nya yaa om??
mohon bantuan na…..
masih nyuuuwwwww… =D
mas kalo untuk membuat aplikasi chat gmna mas (misalkan bikin aplikasi chat fb / ym sendiri ) mohon pencerahannya ,,
)
Disini banyak contohnya om.
bagus sekali mas materinya, ada gak mas contoh aplikasi sederhana yang ada input, edit yang menggunakan fasilitas Winsock, baik dari sisi klien maupun server, terima kasih sebelumnya mas semoga sukses selalu
Coba ini om
mas kalo itu kan pake listview, kalo pake datagrid control gmn caranya om???
jadi di klien ntar pake datagrid plus bisa nginput data langsung???
:hope:
Klo datagrid control sy udah lama enggak make om, pake listview aja
om, saya kan punya Acces Point dari TP-LINK, kalo pengen setting itu kudu konek via browser yg pake ip addres bawaan dari AP tadi..didalamnya ada data kayak SSID, SIGNAL STRENGHT, RANGE, CHANNEL de el el…lha saya mau buat aplikasi dari VB 6.0 buat baca semua data AP itu, tanpa harus masuk browser…caranya gimana ya om?? mohon bantuannya,
makasih banyak om..
Wah klo informasi ini sy benar2x blank om, cuma setau sy untuk akses hardware itu ada sejenis SDK yg sudah disediain oleh vendornya.
Coba aja om tanya ke agen reselernya mana tau ada (tapi sy sendiri kurang yakin
)
Tapi coba aja link berikut om, mana tau dapat pencerahan :
1. Wireless Research API
2. Managed Wifi API
Om jujur aku blm ngerti dan paham masalah server dan klien boleh di katakan tdk tau sama sekali , dan terima kasih banyak buat om Admin lewat blog ini aku banyak belajar tentang pemograman khususnya vb6, klo kita dah buat Applikasi yg biasa berbasis database MySql dan pengen buat server dan klien … langkah2 yg harus kita buat apa saja … seperti konek ke server dan input data dari klien … dan terima kasih banyak Om Kamsiah….
Client/Server adalah arsitektur jaringan yang memisahkan client (biasanya berupa aplikasi desktop, web, mobile dan lain-lain) dengan server.
Aplikasi yang om buat menggunakan VB dan database MySQL itu sudah bisa dikategorikan dalam aplikasi client server meskipun baru 2-tier
Gambar 2 tier
Gambar 3 tier
Misal kita buat applikasi Admin tuk menampilkan semua data .. terus klo mau insert , delete , update dari clien gimana om ? apa kita harus buat applikasi seperti Admin jg ?