Tutorial pembuatan tools chating-client-server multi connection dengan menggunakan excel macro (VBA) dan ActiveX MSWINSCK.OCX (Chapter Client)
Sama seperti postingan saya sebelumnya (Chapter Server). Sebelum
membuat tools ini pastikan dulu “MSWINSCK.OCX” sudah terinstall. Jika belum bisa cek postingan
saya yang Chapter Server.
Kita langsung saja.
- Buka Microsoft Office Excel. Dan rename sheet menjadi “CLIENT”.
- Klik tab Development dan insert 3CommandButton, dengan properties:
1.
CommandButton “cmdConnect”
a.
Name : cmdConnect
b.
Caption : Connect
c.
BackColor :
suka – suka sesuai selera.
2.
CommandButton “cmdSendData”
a.
Name : cmdSendData
b.
Caption : Send
c.
BackColor :
suka – suka sesuai selera.
3.
CommandButton “cmdClear”
a.
Name : cmdClear
b.
Caption : Clear History
c.
BackColor :
suka – suka sesuai selera.
- Dan ketikan :
o
Range A2 :
IP
o
Range A3 :
Port
o
Range A4 :
User ID
o
Range A5 :
Message
o
Range A6 :
History
o
Range B2 :
127.0.0.1
o
Range B3 :
1200
o
Range B4 :
<(Nama User ) suka – suka kalo yang ini mah>
o
Range B5 :
pesan yang akan dikirim
- Klik 2kali salah satu tombol diatas untuk menuju ke VBA Editor.
- Insert “MSWINSCK.OXC” kedalam project dengan cara :
o
Klik Tools.
o
Klik References.
o
Browse. Dan cari “MSWINSCK.OXC” di folder “System32”
untuk windows 32bit atau “SysWOW64” untuk windows 64bit.
o
Klik OK.
- Rename nama sheet “Sheet1” menjadi “shClient” edit melalui tab Properties.
- Lalu paste codingan berikut
Option Explicit
' deklarasi sleep / waktu tunda
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal milisecond As Long)
' deklarasi variable tcpClient sebagai class MSWinsockLib.Winsock dengan events
Private WithEvents tcpClient As MSWinsockLib.Winsock
Dim isConnect As Boolean
' deklarasi range pengaturan
Dim rngConfig As Range
' deklarasi range pesan yang akan dikirim
Dim rngMessage As Range
' deklarasi enum warna hanya pengganti bilangan angka aja supaya mudah diingat
Private Enum COLOR
COLOR_IS_RED = 255 'RGB(256, 0, 0)
COLOR_IS_GREEN = 65280 'RGB(0, 256, 0)
COLOR_IS_BLUE = 16711680 'RGB(0, 0, 256)
COLOR_IS_WHITE = 16777215 'RGB(256, 256, 256)
COLOR_IS_BLACK = 0 'RGB(0, 0, 0)
End Enum
' deklarasi state socket / tcp
Private Enum SOCKET_STATE
SCK_CLOSED = 0
SCK_OPEN = 1
SCK_LISTENING = 2
SCK_CONNECTION_PENDING = 3
SCK_RESOLVING_HOST = 4
SCK_HOST_RESOLVED = 5
SCK_CONNECTING = 6
SCK_CONNECTED = 7
SCK_CLOSING = 8
SCK_ERROR = 9
End Enum
' fungsi tombol hapus history
Private Sub cmdClear_Click()
shClient.Range("B6:B23").ClearContents
End Sub
' fungsi untuk membuat koneksi dengan server
Private Sub cmdConnect_Click()
' membuat variable isConnect selalu bernilai kebalikan nilai sebelumnya
isConnect = Not isConnect
If isConnect Then
' isConnect bernilai true
Set rngConfig = shClient.Range("B2") 'set rngConfig sebagai Range B2
Set rngMessage = shClient.Range("B5") 'set rngMessage sebagai Range B2
' create tcpClient sebagai class MSWinsockLib.Winsock baru
' set ip ke server yang diambil dari Range B2
' set port ke server yang diambil dari Range B3
Set tcpClient = New MSWinsockLib.Winsock 'Object initialization
tcpClient.RemoteHost = rngConfig.Text
tcpClient.RemotePort = rngConfig.Offset(1, 0).Text
' membuat koneksi
tcpClient.Connect
' perintah dibawah hanya untuk informasi
Me.cmdConnect.BackColor = COLOR.COLOR_IS_GREEN
Me.cmdConnect.Caption = "Click to disconnect"
Me.cmdSendData.BackColor = COLOR.COLOR_IS_WHITE
Else
tcpClient.Close
Set tcpClient = Nothing
' perintah dibawah hanya untuk informasi
Me.cmdConnect.BackColor = COLOR.COLOR_IS_RED
Me.cmdConnect.Caption = "Connect"
Me.cmdSendData.BackColor = COLOR.COLOR_IS_WHITE
' reset variable rngMessage dan rngConfig ke nilai null / nothing
Set rngMessage = Nothing
Set rngConfig = Nothing
End If
End Sub
' fungsi untuk kirim data
Private Sub cmdSendData_Click()
' jika tcpClient bernilai Nothing atau isConnect bernilai false maka fungsi tidak akan dijalankan
If tcpClient Is Nothing Or Not isConnect Then Exit Sub
' jika Range B4 kosong atau Range B5 maka fungsi tidak akan dijalankan
If rngConfig.Offset(2, 0).Text = "" Or rngMessage.Text = "" Then Exit Sub
' jika aplikasi tidak terhubung dengan server maka fungsi tidak akan dijalankan
If tcpClient.State = SOCKET_STATE.SCK_CONNECTED Then
' kirim data dengan format
' Range B4 sebagai User ID
' Range B5 sebagai data
' dengan "_" sebagai pemisah
tcpClient.SendData rngConfig.Offset(2, 0).Text & "_" & rngMessage.Text 'Send data.
' cetak data pada range history
rangeHistory rngMessage.Text, True
End If
End Sub
Private Sub rangeHistory(ByVal data As String, ByVal isme As Boolean)
' range History akan menghapus Range B6
' dan menyisipkan data baru di range B23
' jika data dari aplikasi local maka akan rata kanan dan rata kiri untuk data dari server
shClient.Range("B6").Delete xlUp
With shClient.Range("B23")
If isme Then
.HorizontalAlignment = xlRight
Else
.HorizontalAlignment = xlLeft
End If
.Value = data
End With
End Sub
' merupakan event bawaan dari class MSWinsockLib.Winsock
' sub ini berfungsi saat aplikasi menerima data dari server,
Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim strData As String
tcpClient.GetData strData 'received data
rangeHistory strData, False
End Sub
- Naahh.. sekarang pembuatan sudah selesai.
Comments
Post a Comment