Belajar Winsock bagian 1

download Belajar Winsock bagian 1

of 24

Transcript of Belajar Winsock bagian 1

Belajar Winsock bagian 1 IntroJanuary 26, 2010 Admin Leave a comment Go to comments 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 :01 Private Sub Form_Load() 02 With Winsock1 03 'set lokal port, misal 21211 04 'jangan menggunakan port standar yang sudah digunakan 05 'ex : 3306 (MySQL), 3050 (Firebird) de el el 06 .LocalPort = 21211 07 08 'listen on this port

09 .Listen 10 End With 11 End Sub

ketika ada koneksi masuk event Winsock_ConnectionRequest() akan dijalankan, contoh sederhana untuk menghandle event Winsock_ConnectionRequest() :01 Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 02 With Winsock1 03 'tutup terlebih dulu, karena jika sebelumnya masih ada koneksi 04 'akan menyebabkan error 05 .Close 06 'requestID mengandung informasi angka unik setiap koneksi yang 07 masuk 08 .Accept requestID 09 End With 10 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).01 Private Sub cmdTesKoneksi_Click() 02 With Winsock1 03 'ip komputer target 04 .RemoteHost = "127.0.0.1" 05 06 'harus sama dengan port pada saat pemanggilan method .Listen 07 .RemotePort = 21211 08 09 'start the connection 10 .Connect 11 End With 12 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.1 Private Sub Winsock1_Connect() 2 MsgBox "Connected" 3 End Sub 4 5 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) 6 MsgBox "Error: " & Description 7 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) :01 Private Sub Form_Load() 02 With Winsock1 03 'set lokal port, misal 21211 04 'jangan menggunakan port standar yang sudah digunakan 05 'ex : 3306 (MySQL), 3050 (Firebird) de el el 06 .LocalPort = 21211 07 08 'listen on this port 09 .Listen 10 End With 11 End Sub 12 13 Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 14 With Winsock1 15 'tutup terlebih dulu, karena jika sebelumnya masih ada koneksi 16 'akan menyebabkan error 17 .Close 18 'requestID mengandung informasi angka unik setiap koneksi yang 19 masuk 20 .Accept requestID 21 End With 22 End Sub

Source code lengkap program kedua (klien) :01 Private Sub cmdTesKoneksi_Click() 02 With Winsock1 03 If .State sckClosed Then .Close 04 05 'ip komputer target - server 06 .RemoteHost = "127.0.0.1" 07

'harus sama dengan port pada saat pemanggilan method .Listen program server 09 .RemotePort = 21211 10 11 'start the connection 12 .Connect 13 End With 14 End Sub 15 16 Private Sub Winsock1_Connect() 17 MsgBox "Connected" 18 End Sub 19 Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, 20 ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) 21 MsgBox "Error: " & Description 22 End Sub 08

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.

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 ) 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 :1 Private Sub cmdSend_Click() 2 With Winsock1 3 .SendData "Belajar Winsock Bagian 2" 4 End With 5 DoEvents 6 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 :1 Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 2 Dim strData As String 3 4 Call Winsock1.GetData(strData) 5 MsgBox strData 6 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. 2. 3. 4. Objek Winsock Label 2 TextBox CommandButton

Source code lengkap aplikasi server :

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

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 Source code lengkap aplikasi klien :01 02 03 04 05 06 07 08 09 10 11 12 13 14 Option Explicit

dan menunggu koneksi yang masuk.

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

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

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, 36 ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) 37 ' an error has occured somewhere, so let the user know 38 MsgBox "Error: " & Description 39 ' close the socket, ready to go again 40 Winsock1.Close 41 End Sub

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

Belajar Winsock bagian 3 Multiple ConnectionJanuary 30, 2010 Admin Leave a comment Go to comments

Di postingan saya sebelumnya kita sudah mengetahui bagai mana cara membuat aplikasi chat sederhana yang hanya melibatkan saya dan Anda , dan bagai mana jika ada teman saya yang lain ikut nimbrung ? Jelas ini tidak bisa karena 1 winsock hanya bisa menangani 1 port, trus bagaimana jika kita ingin teman kita yang lain bisa konek di port yang sama dan hanya menggunakan 1 winsock? Jawabannya sederhana objek winsocknya kita jadikan array. Oke, masukkan objek winsock ke form kemudian untuk menjadikannya sebagai objek array kita cukup mengset properties Index=0, jadi winsock dengan index 0 bertugas untuk mengecek permintaan koneksi masuk dan mengalokasikannya kepada yang berhak dan tentu saja untuk melakukan hal ini harus dalam mode mendengarkan/Listen1 Private Sub Form_Load() 2 3 4 5 6 With Winsock1(0) .Close .LocalPort = 11111 'nilai port ini bisa diganti .Listen End With

7 End Sub

Ketika ada permintaan koneksi di port 11111, kita harus menambahkan objek winsock baru untuk menerima permintaan koneksi tersebut dan karena objek winsock yang baru tidak kita set properties LocalPortnya otomatis windows yang akan memberikan nilai Port secara acak.01 02 03 04 05 06 'load a new winsock Load Winsock1(Winsock1.UBound + 1) Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) 'we should only be getting connection requests from 'Index 0 because thats the only one that is listening

07 08 09 'accept the incoming connection on our new control Winsock1(Winsock1.UBound).Accept requestID

10 End Sub

Fungsi UBound digunakan untuk mendapatkan nilai index terakhir dari objek array, jadi untuk mengetahui berapa jumlah objek arraynya kita cukup memanggil fungsi UBound + 1. Solusi menggunakan winsock array diatas masih mempunyai sedikit masalah, misalkan kita sudah mempunyai 5 koneksi di port 11111 ini artinya kita sudah mempunyai 6 objek winsock yang aktif, index 0 dalam mode mendengarkan/Listen, dan 1 sampai 5 konek ke klien. Apa yang terjadi jika 3 klien tidak terkoneksi lagi? Sebenarnya sih enggak terlalu bermasalah, masalahnya adalah jika ada klien lain yang konek ke server otomatis objek winsock baru ditambahkan lagi untuk menerima koneksi yang baru, padahal ada 3 objek winsock yang sedang nganggur/idle. Bayangkan jika kita diminta untuk membuat aplikasi billing warnet dengan 100 klien, ada 50 klien yang sudah disconnect kemudian ada 50 klien lagi yang baru konek. Ini artinya kita mempunyai 50 objek winsock nganggur/idle yang jelas-jelas merupakan pemborosan memory dan bagai mana jika hal tersebut terulang lagi, lagi dan lagi. Bagaimana solusinya? Yaph sebenarnya ini juga gampang, jadi jika ada permintaan koneksi dari klien kita cek dulu ada nggak objek winsock yang idle, kalo ada arahkan agar winsock yang idle tadi untuk menerima koneksi tersebut, jika tidak ada baru kita tambahkan objek winsock yang baru untuk menerima koneksi tersebut sehingga kode sebelumnya harus kita revisi menjadi :01 02 03 04 05 06 07 08 09 If Index = 0 Then 'ingat yang bertugas untuk mengecek permintaan koneksi adalah objek winsock dengan index = 0 'ini bagian yang bertugas untuk mengecek winsock yang idle For i = 1 To Winsock1.UBound On Error GoTo errHandle Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) Dim i Dim j As Long As Long

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

If Winsock1(i).State = sckClosed Or Winsock1(i).State = sckClosing Then j = i Exit For End If Next i 'var j menampung index winsock yang idle

'jika j = 0 berarti semua winsock kepakai, otomatis kita harus menambahkan winsock yang baru If j = 0 Then Call Load(Winsock1(Winsock1.UBound + 1)) j = Winsock1.UBound End If

'terima koneksi yang baru With Winsock1(j) Call .Close Call .Accept(requestID) End With

End If

Exit Sub

32 errHandle: 33 Call Winsock1(0).Close

34 End Sub

Yaph cukup itu saja, contoh programnya bisa didownload disini.

Artikel berikutnya insya Alloh dengan judul Belajar Winsock bagian 4 Membuat jaringan VPN sendiri. Di artikel tersebut saya sudah tidak membahas penggunaan winsock lagi tetapi artikel tersebut dibutuhkan agar saya bisa menulis artikel terakhir dari 5 seri belajar Winsock ini yang berjudul Belajar Winsock bagian akhir Contoh kasus mengakses data stok barang dari luar.

Belajar Winsock bagian 4 Membuat jaringan VPN sendiriFebruary 2, 2010 Admin Leave a comment Go to comments Pada artikel kali ini kita stop dulu untuk mengetikan baris-baris kode yang indah itu dan kita akan mencoba untuk membuat jaringan VPN sendiri yang tentunya dengan investasi yang murah meriah dan nyaris dengan biaya 0 rupiah. G percaya ? Oke kita ikuti saja pembahasan berikut. Misalkan kita punya klien sebutnya saja namanya mas Paijo yang sudah menggunakan program retail kita selama beberapa tahun. Mas Paijo ini sering berbelanja untuk keperluan tokonya ke luar kota dan masalah yang dihadapinya adalah kesulitan untuk mengecek jumlah stok barang di toko (selama ini untuk menanyakan jumlah stok masih telp2xan ), dan baru-baru ini mas Paijo menghubungi kita untuk minta dibuatkan program kecil yang hanya sekedar untuk mengecek stok barang. Hasil akhir pembicaraan disepakati perangkat jaringan yang akan digunakan adalah sebagai berikut : 1. Komputer server untuk akses internetnya cukup menggunakan speedy dan hanya mendapatkan ip private. 2. Laptop mas Paijo rencananya menggunakan modem CDMA (bisa starone atau lainnya) kita anggap saja menggunakan starone. Beberapa solusi yang bisa kita tawarkan adalah sebagai berikut :1. Menggunakan program remote seperti Teamviewer atau CrossLoop. Loh kok enggak

pake program remote seperti Radmin, Net Support Manager, atau RealVNC ? Ya jelas enggak bisa, karena komputer servernya hanya mendapatkan ip private kecuali kalo kita mau direportkan dengan menyeting portforwardingnya. 2. Membuat program sendiri dengan menggunakan komponen Winsock, nah kalo ini cocox karena memang itu intinya dibuat artikel ke 4 ini Oke sampai disini kita sudah menentukan pilihan tetapi masalah baru muncul jangankan untuk mengakses data di komputer toko mau ngePING aja selalu Request timed out. Tapi jangan kuatir setiap masalah selalu ada penyelesaiannya dan penyelesaian yang paling sederhana untuk kasus kita kali ini adalah membuat jaringan VPN sendiri dengan bantuan LogMeIn Hamachi. Berikut adalah langkah-langkah mulai dari pendaftaran, konfigurasi dan tentu saja sampai ngPINGnya berhasil 1. Mendaftar dulu disini

2. Setelah proses mendaftar selesai kita lanjutkan dengan membuat jaringan

3. Langkah berikutnya adalah mendownload LogMeIn Hamachi Installer

Sambil menungu proses download selesai kita bisa logout dulu dari situs LogMeIn Hamachi. 4. Setelah download selesai copykan file installer tadi ke laptop mas Paijo dan lakukan instalasi, setelah itu jalankan program LogMeIn Hamachi

5. Selanjutkan kita akan mengganti informasi nama komputer dengan cara klik menu System -> Preferences

6. Bergabung dengan Jaringan Tokonya Mas Paijo dengan mengklik menu Network -> Join an existing network atau cukup dengan mengklik tombol Join an existing network

Setelah itu kita diminta untuk memasukkan Network ID dan Password

jika berhasil akan kita dapatkan tampilan lebih kurang seperti berikut :

7. Ulangi langkah 4 sampai 6 di komputer server 8. Setelah instalasi + konfigurasi di komputer server selesai, coba kita cek masing-masing program LogMeIn Hamachi maka kita akan mendapatkan tampilan seperti berikut :

9. Biar semakin manteb kita login ulang kesini dan jika kita mendapatkan tampilannya seperti berikut berarti langkah-langkah sebelumnya sudah 100% berhasil

dan otomatis kita juga bisa langsung menggunakan program-program remote seperti Radmin, Net Support Manager, atau RealVNC karena kita sudah mendapatkan IP Publik sendiri 10. Terakhir kita akan mencoba ngePING komputer server

Jika hasil ping masih Request timed out coba nonaktifkan windows firewall di komputer server kemudian coba di ping lagi. Oke sampai disini kita sudah berhasil membuat jaringan VPN sendiri dan memudahkan saya untuk menulis artikel terakhir yang insya Alloh dengan judul Belajar Winsock bagian akhir Contoh kasus mengakses data stok barang dari luar. Selamat mencoba

Belajar Winsock bagian akhir Contoh kasus mengakses data stok barang dari luarFebruary 4, 2010 Admin Leave a comment Go to comments Akhirnya rilis juga artikel terakhir dari 5 seri belajar winsock ini, sebelum kita melanjutkan pembahasan ada baiknya kita melakukan sedikit review :1. Dasar-dasar penggunaan winsock sudah kita pelajari 2. Ini terbukti dengan suksesnya kita membuat aplikasi chat sederhana 3. Di tambah lagi ada teman kita yang mau nebeng sehingga terciptanya aplikasi chat

multiple connection 4. 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 : 1. Database barang dengan format ms access 2. Aplikasi server 3. 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) :01 02 03 04 05 06 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 07 jaringan lokal masih bisa set 4096 08 Private Function pembulatanKeAtas(ByVal X As Double, Optional ByVal Factor 09 As Double = 1) As Double 10 Dim temp As Double 11 12 temp = Int(X * Factor) 13 pembulatanKeAtas = (temp + IIf(X = temp, 0, 1)) / Factor 14 End Function 15

16 Private Function getDataBarang(ByVal param As String) As String() 17 Dim rs As ADODB.Recordset 18 19 Dim div As Long 20 Dim lengthData As Long 21 Dim n As Long 22 Dim i As Long 23 24 Dim tmp As String 25 Dim arrTmp() As String 26 27 strSql = "SELECT UCASE(nama), harga, stok FROM barang " & param & "" 28 Set rs = openRecordset(strSql) 29 If Not rs.EOF Then 30 For i = 1 To getRecordCount(rs) tmp = tmp & rs(0).Value & FLD_SPR & rs(1).Value & FLD_SPR & 31 rs(2).Value & REC_SPR 32 33 rs.MoveNext 34 Next i 35 If Len(tmp) > 0 Then tmp = Left(tmp, Len(tmp) - 1) 36 37 'karakter ~ sebagai penanda awal dan akhir data 'untuk memudahkan pengecekan di klien bahwa data yg diterima sudah 38 lengkap/belum 39 'ex : ~DATA BARANG + SEPARATOR KOLOM DAN BARIS~ 40 41 'contoh format data disini ada 2 : '1. jika data 1024 karakter 54 'data dibuat menjadi beberapa package 55 'ex : jika jumlah karakter 2345 56 ' package 1 -> 1024 57 ' package 2 -> 1024 58 ' package 3 -> 297 59 ' berarti data yg dikirim ke klien sebanyak 3 x 60

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 End

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 Function

pengiriman data ke klien akan dihandle oleh event DataArrival :01 Private Sub Socket_DataArrival(Index As Integer, ByVal bytesTotal As Long) 02 Dim i As Long 03 Dim strData As String 04 Dim ret As Boolean 05 06 Dim arrTmp() As String 07 08 'On Error GoTo errHandle 09 ' Grab the data from the specified Winsock object, and pass it to the 10 parent. 11 Call Socket(Index).GetData(strData) 12 DoEvents 13 14 arrTmp = getDataBarang(strData) 15 For i = LBound(arrTmp) To UBound(arrTmp) 16 If Len(arrTmp(i)) > 0 Then ret = send(Index, arrTmp(i)) 17 Next i

18 19 Exit Sub 20 errHandle: 21 Call Socket(Index).Close 22 End Sub

sedangkan untuk aplikasi klien bagian yg bertugas menerima data masih di event yang sama yaitu DataArrival :01 Private Sub Socket_DataArrival(ByVal bytesTotal As Long) 02 Dim dataMasuk As String 03 04 'On Error Resume Next 05 06 Socket.GetData dataMasuk 07 08 If Left(dataMasuk, 2) = "~~" Then 'package data 1024 16 'berikut kode untuk penggabungan package data 17 tmp = tmp & dataMasuk 18 If InStr(1, dataMasuk, "~") > 0 Then packageHdr = packageHdr & "~" 19 If Len(packageHdr) = 2 Then Call execOutput(tmp) 'penggabungan 20 package data selesai 21 End If 22 End Sub

dan ini prosedure yang bertanggung jawab untuk memparsing data dan menampilkan ke ListView :01 Private Sub execOutput(ByVal data As String) 02 Dim rec() As String 03 Dim fld() As String 04 05 Dim x As Long 06 Dim noUrut As Long 07 08 On Error GoTo errHandle 09 10 Screen.MousePointer = vbHourglass 11 DoEvents

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

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 & "' 28 tidak ditemukan", vbInformation, "Informasi" 29 30 Else 31 'contoh data : '~~SUSU KEDELAI ABC 200M#1000#24|SUSU KEDELAI MELILEA 500#1000#0| 32 KOPI SUSU KPL API 3P#1000#0|SUSU KEDELAI ABC 200#1000#2 33 '| -> pemisah baris 34 '# -> pemisah kolom 35 36 rec = Split(data, REC_SPR) 37 38 With lsvBarang 39 noUrut = 1 40 For x = LBound(rec) To UBound(rec) 41 fld = Split(rec(x), FLD_SPR) 42 43 .ListItems.Add , , noUrut 44 .ListItems(noUrut).SubItems(1) = fld(0) 'nama barang .ListItems(noUrut).SubItems(2) = FormatNumber(fld(1), 0) 45 'harga 46 .ListItems(noUrut).SubItems(3) = fld(2) 'stok 47 48 noUrut = noUrut + 1 49 Next x 50 End With 51 End If 52 53 Screen.MousePointer = vbDefault 54 55 Exit Sub 56 errHandle:

57 Screen.MousePointer = vbDefault 58 End Sub

dan ini hasilnya

mas Paijo mengetikan keyword mie kemudian mengirimkannya ke server dan akan diproses dengan hasil rincian sbb : 1. Jumlah record yang ditemukan sebanyak 181 record 2. Jumlah karakter nama barang + harga + stok + seperator = 5084 karakter dan dikirim menjadi beberapa paket 3. Hasil akhir klien juga menampilkan sebanyak 181 record, yang berarti bahwa uji coba kita berhasil