Anda di halaman 1dari 23

A; Desain Aplikasi

Cara Pembuatan Aplikasi Chat Multi User


Buka program Visual Basic dan buatlah project baru dengan nama AplikasiChat.vbp, tambahkan
sebuah form dengan nama frmMain.frm

2. Pengaturan Properti
Komponen
Form 1
Label1
Label2
Label3
Label4
Label5
Label6
Label7
Label8
Label9
TextBox1
TextBox2
TextBox3
TextBox4

Properti
(Name)
Caption
StartupPosition
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
Caption
(Name)
Text
(Name)
Text
(Name)
Text
(Name)

Nilai
frmMain
Aplikasi MultiChat
2-CenterScreen
Nama:
Sambung ke:
Port :
Status:
Dialog Pesan:
Pesan:
Data Terkirim:
Data Diterima:
Members:
txtNama
(kosongkan)
txtIP
127.0.0.1
txtPort
1000
txtStatus

Fungsi
Form Aplikasi Chat
Label Nama
Label Sambung ke
Label Port
Label Status
Label dialog
Label Pesan
Label Data Terkirim
Label Data Diterima
Label Members
Tempat memasukkan
nama
Tempat memasukkan IP
Tempat memasukkan
Port
Melihat Status koneksi

MultiLine
ScrollBars
Text
(Name)
Text
(Name)
Text
(Name)
List
Multiselect
Sorted
(Name)
List
(Name)
List
(Name)
Caption
(Name)
Caption
(Name)
Caption

True
2-Vertical
(kosongkan)
txtDialog
(kosongkan)
txtPesan
(kosongkan)
Pengguna
(kosongkan)
2-Extended
True
Terkirim
(kosongkan)
Diterima
(kosongkan)
cmdServer
Server
cmdKlien
Klien
cmdPutus
Putuskan

CommandButton4

(Name)
Caption

cmdHilang
Hilangkan Pilihan

CommandButton5

(Name)
Caption

cmdKeluar
Keluarkan

(Name)
Caption
(Name)
Caption

cmdExit
EXIT
cmdKirim
Kirim

CheckBox

(Name)

chkPrivate

Winsock1
Winsock2

(Name)
(Name)
(Name)
Interval

sckConnection
sckConnect
tmrSendData
1

TextBox5
TextBox6
ListBox1
ListBox2
ListBox3
CommandButton1
CommandButton2
CommandButton3

CommandButton6
CommandButton7

Timer

B; Listing Program

Melihat percakapan
pesan
Tempat menulis pesan
Melihat pemakai aplikasi
Melihat Data terkirim
Melihat Data diterima
Tombol jika anda
menjadi Server
Tombol jika anda
menjadi Klien
Tombol untuk
memutuskan koneksi
Tombol untuk
menghilangkan pilihan
pada daftar pemakai
aplikasi
Tombol untuk
mengeluarkan seseorang
dari koneksi, ini hanya
untuk server
Tombol untuk keluar dari
aplikasi
Tombol untuk
mengirimkan pesan
Untuk memgirimkan
pesan pribadi
Mengontrol koneksi
Mengontrol koneksi
Pengatur waktu data
dikirim

Klik ganda pada form dan masukkan kode


Option Explicit
Port default yang digunakan ketika koneksi.
Const DEFAULT_PORT = 1000
FileINI yang digunakan oleh program.
Const INI_FILE = "multichat.ini"
parameter-parameter yang dikirim beserta perintah-perintah yang dikirim antar komputer.
'Semua parameter-parameter akan diukur khususnya panjang karakter-karakter PARAM_LEN untuk
menyederhanakan perintah-perintah oleh komputer(s) penerima.
Const PARAM_LEN = 10
Digunakan untuk menunjukkan bahwa suatu koneksi sebenarnya sendiri.
Unsur yang pertama adalah untuk server, dan Const ini akan mendefinisikan tentang server.
Const SELF = -1
' Konstanta digunakan untuk menggambarkan kode-kode yang digunakan oleh Winsock.
' Kode-kode ini menentukan apa masing-masing perintah yang dikirim sedang digunakan
Const SCK_CODE_GANTI_NAMA = "[Ganti Nama]"
Const SCK_CODE_TERPUTUS = "[Terputus]"
Const SCK_CODE_JOINED = "[Bergabung]"
Const SCK_CODE_KELUARKAN = "[Dikeluarkan]"
Const SCK_CODE_LINE = "[Line]"
Const SCK_CODE_PESAN = "[Pesan]"
Const SCK_CODE_NEW_NAME_LIST = "[NAMA LIST BARU]"
Const SCK_CODE_PEOPLE = "[Orang]"
Const SCK_CODE_PRIVATE_MESSAGE = "[Pesan Privat]"
' Ini adalah perintah-perintah dan data yang dikirim kepada komputer-komputer yang lain, yang ke
server (jika anda sudah tersambung ke server) atau kepada semua komputer yang dihubungkan (jika
anda adalah server).
Dim mSendList As New Collection
Dim mSendTo As New Collection
Dim miX As Integer, miY As Integer
Dim miNumConnections As Integer
Dim mbServer As Boolean

Public Function sFormatSend(vData) As String


Bentuk data yang akan dikirim.
buat PARAM_LEN long chars.
sFormatSend = Format(vData, String(PARAM_LEN, "0"))
'Jika ( PARAM_LEN + 1) long chars, itu berarti tanda negatif.
'Maka itu bentuk karakter lebih pendek.

If Len(sFormatSend) = PARAM_LEN + 1 Then


sFormatSend = Format(vData, String(PARAM_LEN - 1, "0"))
End If
End Function
Public Sub SendToAllButOriginator(vsData As String, viConnection As Integer)
'Kirimkan vsData kepada semua koneksi kecuali viConnection (pembuat data).
Dim i As Integer
'Koneksi beredar dan mengirimkan data ke masing-masing koneksi terbuka kecuali viConnection.
For i = 1 To miNumConnections
If i <> viConnection And frmMain.sckConnection(i).State = sckConnected Then
SendToPerson vsData, i
End If
Next i
End Sub

Public Sub ProcessData(vsString As String, viConnection As Integer)


'Prosedur ini memproses data yang diterima dari server atau dari koneksi-koneksi ke server.
'vsString = string perintah yang sedang diproses
'viConnection = koneksi dari string perintah yang diterima
Dim i As Integer
Dim sCommand As String
Dim sInstruction As String
Dim sData As String
Dim bTemp As Boolean
Dim iCount As Integer
Dim iUser As Integer
Do While InStr(1, vsString, vbCrLf)
'Tersimpan di sCommand bagian dari arus data yang berisi perintah yang pertama.
sCommand = Mid(vsString, 1, InStr(1, vsString, vbCrLf) - 1)
If viConnection = SELF Then
'Data dari server.
ShowReceivedData "sckConnect: " & sCommand
Else
'Data dari klien.
ShowReceivedData "sckConnection(" & viConnection & "): " & sCommand
End If

Masing-masing perintah berisi satu instruksi seperti [Pesan] atau [Memutuskan].


'Beberapa memerintah juga berisi parameter-parameter.
'Di sini instruksi bagian dari perintah itu disimpan di sInstruction dan sisanya disimpan di
sData.
sInstruction = Mid(sCommand, 1, InStr(1, sCommand, "]"))
sData = Mid(sCommand, InStr(1, sCommand, "]") + 1, Len(sCommand))
Select Case sInstruction
Case SCK_CODE_GANTI_NAMA
Perintah ini dikirim oleh seorang pengguna ketika mereka mengubah nama mereka di dalam teks
Nama
'update nama mereka di dalam daftar nama.
ChangeAddName viConnection, sData
'Refresh daftar nama di semua komputer yang terhubung.
SendPeopleList
Case SCK_CODE_TERPUTUS
'Perintah ini diterima ketika server memberitahu seseorang bahwa orang lain sudah terputus.
'Perbarui status.
UpdateStatus sConnectionName(sParam(sData, 1)) & " terputus."
' Atur ulang nama mereka di dalam daftar nama.
RemoveName sParam(sData, 1)
Case SCK_CODE_JOINED
'Perintah ini dikirim kepada server ketika seseorang bergabung, memberitahu server, nama dari orang
yang tersambung.
'Update status.
UpdateStatus sData & " Bergabung."
Jika anda server.
If mbServer Then
'Beritahu semua koneksi yang lain bahwa seseorang sudah begabung dan mengirimkan nama
SendToAll SCK_CODE_JOINED & sData, False
'-Tambahkan nama ke daftar nama.
AddName viConnection, sData
'Refresh masing-masing daftar nama koneksi.
SendPeopleList
End If
Case SCK_CODE_KELUARKAN
'Perintah ini dikirim oleh koneksi-koneksi pemberitahuan server bahwa seseorang dikeluarkan.
'Update status.
UpdateStatus "Dikeluarkan " & sConnectionName(sParam(sData, 1)) & "."
'Hilangkan nama mereka dari daftar nama.
RemoveName sParam(sData, 1)

Case SCK_CODE_PESAN
'Perintah ini dikirim ketika seseorang mengirimkan pesan.
'Tunjukkan pesan.
UpdateDialog sData
Beritahu pesan pada semua koneksi yang terbuka.
If mbServer Then
SendToAllButOriginator SCK_CODE_PESAN & sData, viConnection
End If
Case SCK_CODE_NEW_NAME_LIST
' Perintah ini dikirim oleh server sebelum merefresh daftar nama.
Pengguna.Clear

Case SCK_CODE_PEOPLE
'Ini dikirim oleh server untuk memberitahu koneksi-koneksi tersambung nama telah berubah.
'Update daftar nama.
ChangeAddName sParam(sData, 1), sLongParam(sData, 2)
Case SCK_CODE_PRIVATE_MESSAGE
'Perintah ini diterima oleh server ketika seseorang mengirimkan suatu pesan pribadi
'Dapatkan nomor pesan dari para pemakai yang sedang dikirimkan.
iCount = sParam(sData, 1)
baca parameter iCount berikutnya.
'Ini menunjukkan para pengirim pesan.
For i = 2 To iCount + 1
Dapatkan pengguna berikutnya di dalam daftar pengguna bahwa pesan adalah untuk:
iUser = sParam(sData, i)
If iUser = SELF Then
'Pesan untuk server.
'Parameter akhir pesan.
UpdateDialog sLongParam(sData, iCount + 2)
ElseIf iUser <> viConnection Then
'Pastikan pesan tidak dikembalikan kepada orang yang mengirimnya.
'Pesan untuk beberapa pengguna yang terhubung.
SendToPerson SCK_CODE_PESAN & sLongParam(sData, iCount + 2), iUser
End If
Next i
End Select
'Hilangkan perintah yang diproses dari arus data.

vsString = Mid(vsString, InStr(1, vsString, vbCrLf) + 2, Len(vsString))


Loop
End Sub
Public Sub SendPeopleList()
'Ini adalah suatu prosedur untuk merefresh masing-masing daftar koneksi.
Dim i As Integer, j As Integer
'Beredar di seluruh koneksi.
For i = 0 To Pengguna.ListCount - 1
'Jangan kirimkan daftar kepada diri sendiri.
If Pengguna.ItemData(i) <> SELF Then
'Kirimkan perintah untuk jmemperjelas daftar kepada pemakai.
SendToPerson SCK_CODE_NEW_NAME_LIST, Pengguna.ItemData(i)
' Kirimkan nama untuk masing-masing pemakai pada masing-masing koneksi.
For j = 0 To Pengguna.ListCount - 1
SendToPerson SCK_CODE_PEOPLE & sFormatSend(Pengguna.ItemData(j)) &
Pengguna.List(j), Pengguna.ItemData(i)
Next j
End If
Next i
End Sub

Public Sub ClearStuff()


Prosedur ini membersihkan dialog pesan, daftar nama, dll yang digunakan selama suatu chat room.
digunakan untuk mengaatur ulang dialog pesan, daftar nama, dll setelah suatu chat room ditutup.
'Bersihkan antrian data.
Set mSendList = Nothing
Set mSendTo = Nothing
Sembunyikan tombol Keluarkan.
cmdKeluar.Visible = False
Bersihkan daftar koneksi.
Pengguna.Clear
Bersihkan dialog pesan.
txtDialog.Text = ""
End Sub

Public Function sParam(vsData As String, viNum As Integer) As String

' Fungsi ini menarik parameter viNum dari arus data vsData, yang sedang diproses di dalam prosedur
ProcessData.
'Parameter ini adalah panjang karakter PARAM_LEN
sParam = Mid(vsData, PARAM_LEN * (viNum - 1) + 1, PARAM_LEN)
End Function
Public Function sLongParam(vsData As String, viNum As Integer) As String
' Fungsi ini menarik parameter viNum dari arus data vsData, yang sedang diproses di dalam prosedur
ProcessData.
' Parameter ini biasanya berada pada akhir suatu perintah.
sLongParam = Mid(vsData, PARAM_LEN * (viNum - 1) + 1, Len(vsData))
End Function

Public Function bConnected() As Boolean


Fungsi ini mengembalikan True bila ada koneksi terbuka.
'Ini digunakan untuk melihat jika anda diizinkan untuk mengubah pengaturan port, server suatu chat
room, atau menyambungkan ke chat room.
Dim i As Integer
For i = 1 To miNumConnections
If sckConnection(i).State <> sckClosed Then
bConnected = True
Exit Function
End If
Next i
If sckConnect.State <> sckClosed Then
bConnected = True
End If
End Function

Public Sub AddName(viConnection As Integer, vsName As String)


Prosedur ini menambahkan suatu nama ke daftar nama.
'viConnection =pemakai koneksi

'vsName =nama dari orang


Dim i As Integer
'Tambahkan nama itu ke daftar koneksi.
Pengguna.AddItem vsName
' Kaitkan item itu di dalam daftar nama dengan koneksi ini.
For i = 0 To Pengguna.ListCount - 1
If Pengguna.ItemData(i) = 0 Then
Pengguna.ItemData(i) = viConnection
Exit For
End If
Next i
End Sub

Public Sub ChangeAddName(viConnection As Integer, vsName As String)


'Prosedur ini mengubah suatu nama di dalam daftar nama, atau menambahkannya jika tidak
ditemukan.
'viConnection = pemakai koneksi itu
' vsName =nama dari orang
Dim i As Integer, j As Integer
Dim bFound As Boolean
'Mencari nama sesuai dengan koneksi itu, menghapusnya, dan menambahkan ulang.
'Hal ini memastikan bahwa kotak daftar yang diurutkan tetap diurutkan
For i = 0 To Pengguna.ListCount - 1
If Pengguna.ItemData(i) = viConnection Then
Hapus nama.
Pengguna.RemoveItem i
Tambahkan nama.
Pengguna.AddItem vsName
For j = 0 To Pengguna.ListCount 1
'Unsur baru akan memiliki ItemData 0.
If Pengguna.ItemData(j) = 0 Then
Pengguna.ItemData(j) = viConnection
Exit For
End If
Next j
bFound = True
Exit For
End If
Next i
If Not bFound Then
AddName viConnection, vsName
End If
End Sub

Public Sub RemoveName(viConnection As Integer)


' Prosedur ini mencabut suatu nama dari daftar nama.
'viConnection =pemakai koneksi itu
Dim i As Integer
For i = 0 To Pengguna.ListCount - 1
If Pengguna.ItemData(i) = viConnection Then
Pengguna.RemoveItem i
Exit For
End If
Next i
End Sub

Public Function sConnectionName(viConnection As Integer) As String


' fungsi ini mencari daftar koneksi-koneksi untuk nama dari seorang pemakai.
'viConnection =pemakai koneksi itu
Dim i As Integer
For i = 0 To Pengguna.ListCount - 1
If Pengguna.ItemData(i) = viConnection Then
sConnectionName = Pengguna.List(i)
Exit For
End If
Next i
End Function
Public Sub SendToAll(vsData As String, vbSelf As Boolean)
'Kirimkan vsData kepada semua koneksi.
'vbSelf menentukan ya atau tidaknya vsData dikirim kepada diri sendiri..
Dim i As Integer
'Beredar melalui koneksi-koneksi dan mengirimkan data ke masing-masing koneksi terbuka.
For i = 1 To miNumConnections
If frmMain.sckConnection(i).State = sckConnected Then
SendToPerson vsData, i
End If
Next i
'Kirim kepada diri sendiri jika perlu.
If vbSelf Then
SendToSelf vsData
End If
End Sub
Public Sub SendToPerson(vsData As String, viConnection As Integer)
'Kirimkan vsData ke viConnection.

mSendList.Add vsData
mSendTo.Add "sckConnection(" & viConnection & ")"
End Sub

Public Sub SendToSelf(vsData As String)


'Kirimkan vsData kepada diri sendiri (server).
'panggil ProcessData di vsData.
ProcessData vsData & vbCrLf, SELF
End Sub
Public Sub SendToServer(vsData As String)
'Kirimkan vsData kepada server.
mSendList.Add vsData
mSendTo.Add "sckConnect"
End Sub
Public Sub UpdateStatus(vsStatus As String)
'Tambahkan vsStatus kepada status chat room
txtStatus.Text = txtStatus.Text & vbCrLf & vsStatus
'menunjuk ujung kotak teks supaya Anda dapat melihat teks paling terbaru.
txtStatus.SelStart = Len(txtStatus.Text)
If Mid(txtStatus.Text, 1, Len(vbCrLf)) = vbCrLf Then
txtStatus.Text = Mid(txtStatus.Text, Len(vbCrLf) + 1, Len(txtStatus.Text))
End If
End Sub
Public Sub UpdateDialog(vsDialog As String)
'Tambahkan vsDialog ke dialog chat room
txtDialog.Text = txtDialog.Text & vbCrLf & vsDialog
'menunjuk ujung kotak teks supaya Anda dapat melihat teks paling terbaru.
txtDialog.SelStart = Len(txtDialog.Text)
If Mid(txtDialog.Text, 1, Len(vbCrLf)) = vbCrLf Then
txtDialog.Text = Mid(txtDialog.Text, Len(vbCrLf) + 1, Len(txtDialog.Text))
End If
End Sub

Public Sub ShowSentData(vsString As String)


vsString menunjukkan data yang dikirim
'tambahkan ke kotak daftar.
Terkirim.AddItem vsString
'Gulung kotak daftar ke bawah jadi data yang baru akan kelihatan.
Terkirim.TopIndex = Terkirim.ListCount 1
End Sub
Public Sub ShowReceivedData(vsString As String)
vsString menunjukkan data yang diterima
'tambahkan ke kotak daftar.
Diterima.AddItem vsString
'Gulung kotak daftar ke bawah jadi data yang baru akan kelihatan.
Diterima.TopIndex = Diterima.ListCount - 1
End Sub
Public Sub OpenConnection()
'sembunyikan/tampilkan fungsi-fungsi tertentu karena koneksi sedang dibuka.
cmdServer.Visible = False
cmdKlien.Visible = False
End Sub
Public Sub CloseConnection()
'sembunyikan/tampilkan fungsi-fungsi tertentu karena koneksi sedang ditutup.
cmdServer.Visible = True
cmdKlien.Visible = True
End Sub

Private Sub Form_Unload(Cancel As Integer)


Dim i As Integer
Tutup semua koneksi.

sckConnect.Close
For i = 1 To miNumConnections
sckConnection(i).Close
Next i
panggil procedure yang ditulis pengguna ke satu file INI.
End Sub

Klik ganda txtNama dan masukkan code


Private Sub txtNama_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
'Jika tombol Enter ditekan di dalam kotak teks nama, update nama anda di layar dan di semua
komputer yang lain.
If mbServer Then
'Jika anda server, update nama di layar anda.
ChangeAddName SELF, txtNama.Text
'Refresh daftar nama di semua koneksi.
SendPeopleList
Else
Kirim nama baru ke server.
SendToServer SCK_CODE_GANTI_NAMA & txtNama.Text
End If
'Buat VB berpikir tidak ada apa pun tombol keyboard ditekan. Hal ini mencegah satu tanda bunyi
mengganggu.
KeyAscii = 0
End If
End Sub
Klik ganda txtPesan dan masukkan code
Private Sub txtPesan_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
'Jika tombol Enter ditekan di dalam kotak teks maka suatu pesan akan dikirim, hampir sama dengan
tombol Kirim.
cmdKirim_Click
'Bersihkan kotak teks.
txtPesan.Text = ""
'Buat VB berpikir tidak ada apa pun tombol keyboard ditekan. Hal ini mencegah satu tanda bunyi
mengganggu.
KeyAscii = 0
End If
End Sub
Klik ganda sckConnection dan masukkan code

Private Sub sckConnection_Close(Index As Integer)


'Salah satu dari koneksi ke server itu tertutup.
'Tutup koneksi.
sckConnection(Index).Close
'Jika seseorang ada pada koneksi itu, beritahu koneksi-koneksi yang terbuka.
If sConnectionName(Index) <> "" Then
Update status.
UpdateStatus sConnectionName(Index) & " Tidak Tersambung."
Hilangkan nama mereka dari daftar nama.
RemoveName Index
server memberitahu pada semua komputer yang terhubung bahwa orang ini sudah diputus..
SendToAll SCK_CODE_TERPUTUS & sFormatSend(Index), False
End If
End Sub

Private Sub sckConnection_ConnectionRequest(Index As Integer, ByVal requestID As Long)


'Suatu koneksi yang diminta dari server.
Dim i As Integer
Dim iConnection As Integer
'Pastikan 0 kontrol di dalam array. Hal ini adalah satu-satunya yang dapat menerima koneksi-koneksi.
If Index = 0 Then
Mencari Winsock kotrol yang tersedia
For i = 1 To miNumConnections
If sckConnection(i).State = sckClosed Then
iConnection = i
Exit For
End If
Next i
'Jika tidak ada yang ditemukan, ciptakan yang baru.
If iConnection = 0 Then
Hitung jumlah koneksi.
miNumConnections = miNumConnections + 1
'memuat Winsock kontrol yang baru untuk koneksi ini.
Load sckConnection(miNumConnections)
Kontrol yang digunakan adalah kontrol yang baru.
iConnection = miNumConnections
End If
'Tetapkan port untuk kontrol ini ke 0. (Secara acak menugaskan satu port yang tersedia.)
sckConnection(iConnection).LocalPort = 0
Kontrol ini menerima koneksi.
sckConnection(iConnection).Accept requestID
End If
End Sub

Private Sub sckConnection_DataArrival(Index As Integer, ByVal bytesTotal As Long)

'Data diterima di server dari satu koneksi yang terbuka.


Dim sString As String
Dapatkan data.
sckConnection(Index).GetData sString, vbString
Data diproses.
ProcessData sString, Index
End Sub

Klik ganda sckConnect dan masukkan code


Private Sub sckConnect_DataArrival(ByVal bytesTotal As Long)
Data diterima di komputer yang tersambung ke server.
Dim sString As String
Dapatkan data
sckConnect.GetData sString, vbString
'data diproses.
ProcessData sString, -1
End Sub
Private Sub sckConnect_Close()
' Hal ini terjadi ketika koneksi kepada server gagal.
'Update status.
UpdateStatus "Disconnected."
'Tutup koneksi.
sckConnect.Close
'Bersihkan daftar nama.
Pengguna.Clear
bersihkan daftar nama, dialog, dll untuk membuat chat room baru.
ClearStuff
'sembunyikan/tampilkan fungsi-fungsi tertentu karena koneksi sedang ditutup.
CloseConnection
End Sub
Klik ganda cmdServer dan masukkan code
Private Sub cmdServer_Click()
'Cek input.
If Len(txtNama.Text) = 0 Then
MsgBox "Mohon Masukkan Nama", vbCritical
txtNama.SetFocus
Exit Sub
End If

'Seseorang meng-klik tombol Server untuk menjadi server chat room.


'Sembunyikan/perlihatkan fungsi tertentu karena suatu koneksi sedang dibuka.
OpenConnection
'mengingatkan bahwa anda adalah server.
mbServer = True
Bersihkan daftar nama, dialog, dll untuk membuat chat room baru.
ClearStuff
Tutup Winsock kontrol untuk mengizinkan anda tersambung dengan server.
sckConnect.Close
Reset winsock kotrol untuk melihat koneksi.
sckConnection(0).Close
sckConnection(0).LocalPort = txtPort.Text
sckConnection(0).Listen
Upadate Status.
UpdateStatus "Server."
Tampilkan nama server pada daftar koneksi.
Pengguna.AddItem txtNama.Text
Pengguna.ItemData(0) = SELF
'Tampilkan tombol Keluarkan. Ini hanya untuk server.
cmdKeluar.Visible = True
End Sub

Klik ganda cmdKlien dan masukkan code


Private Sub cmdKlien_Click()
'Seseorang meng-klik tombol Klien untuk tersambung ke seseorang yang bertindak sebagai server.
On Error GoTo Err_cmdKlien_Click
If Len(txtNama.Text) = 0 Then
MsgBox "Mohon Masukkan Nama", vbCritical
txtNama.SetFocus
Exit Sub
End If
'sembunyikan/tampilkan fungsi-fungsi tertentu karena koneksi sedang dibuka.
OpenConnection
Anda bukan server.
mbServer = False
bersihkan daftar nama, dialog, dll untuk membuat chat room baru.
ClearStuff
'Update status.
UpdateStatus "Tarsambung..."
'Tutup port yang sedang digunakan dan coba sambung lagi.
sckConnect.Close
sckConnect.RemotePort = txtPort.Text
sckConnect.Connect txtIP.Text
Kirim nama pengguna ke server.
SendToServer SCK_CODE_JOINED & txtNama.Text
Exit Sub
'Jika suatu koneksi tidak bisa dilakukan, kode ini dijalankan.

Err_cmdKlien_Click:
MsgBox "Tidak dapat tersambung.", vbExclamation, App.Title
sckConnect.Close
UpdateStatus "Tidak Tersambung."
'sembunyikan/tampilkan fungsi-fungsi tertentu karena koneksi sedang ditutup.
CloseConnection
End Sub

Klik ganda cmdPutus dan masukkan code


Private Sub cmdPutus_Click()
Seseorang meng-klik tombol Putuskan untuk memutuskan koneksi.
Dim i As Integer
Tutup semua koneksi.
sckConnect.Close
For i = 0 To miNumConnections
sckConnection(i).Close
Next i
mbServer = False
Update status.
UpdateStatus "Tidak Tersambung."
bersihkan daftar nama, dialog, dll untuk membuat chat room baru.
ClearStuff
'sembunyikan/tampilkan fungsi-fungsi tertentu karena koneksi sedang ditutup.
CloseConnection
End Sub

Klik ganda cmdHilang dan masukkan code


Private Sub cmdHilang_Click()
Hilangkan pilihan pada daftar nama koneksi.
Dim i As Integer
For i = 0 To Pengguna.ListCount - 1
Pengguna.Selected(i) = False
Next i
End Sub

Private Sub cmdKeluar_Click()


'Server yang menentukan untuk mengeluarkan sebagian orang.
Dim i As Integer, j As Integer
Cek siapa yang terpilih di daftar nama.
' Pastikan untuk mengabaikan jika server terpilih.

For i = Pengguna.ListCount - 1 To 0 Step -1


If Pengguna.Selected(i) And Pengguna.ItemData(i) <> SELF Then
'Ketika suatu nama yang terpilih ditemukan, beritahu semua koneksi yang terbuka bahwa orang ini
dikeluarkan.
'Tetapi tidak mengirimkan informasi ini kepada orang lain yang sedang dikeluarkan atau kepada
server.
For j = 0 To Pengguna.ListCount - 1
If Pengguna.ItemData(j) <> SELF Then
If sckConnection(Pengguna.ItemData(j)).State = sckConnected And Pengguna.Selected(j) =
False Then
SendToPerson SCK_CODE_KELUARKAN & sFormatSend(Pengguna.ItemData(i)),
Pengguna.ItemData(j)
End If
End If
Next j
Tutup koneksi.
sckConnection(Pengguna.ItemData(i)).Close
Update status.
UpdateStatus "Dikeluarkan " & Pengguna.List(i) & "."
Hilangkan nama mereka dari daftar nama.
Pengguna.RemoveItem (i)
End If
Next i
Hilangkan pilihan dari daftar nama.
For i = 0 To Pengguna.ListCount - 1
Pengguna.Selected(i) = False
Next i
End Sub

Private Sub cmdKirim_Click()


'Seseorang meng-klik tombol Kirim untuk mengirimkan suatu pesan.
Dim i As Integer
Dim iCount As Integer
Dim sUsers As String
If mbServer Then
'Jika anda adalah server, kirimkan pesan itu kepada semua koneksi yang terbuka.
If chkPrivate.Value = vbChecked Then
'Pesan pribadi -hanya untuk para pemakai yang terpilih.
'Lihat yang terpilih di dalam kotak daftar dan kirimkan pesan kepada mereka.
For i = 0 To Pengguna.ListCount - 1
If Pengguna.Selected(i) = True Then
'Jangan kirimkan pesan kepada diri sendiri.
If Pengguna.ItemData(i) <> SELF Then
SendToPerson SCK_CODE_PESAN & "*" & txtNama.Text & "*: " & txtPesan.Text,
Pengguna.ItemData(i)

End If
End If
Next i
Else
'Pesan untuk semua pengguna.
SendToAll SCK_CODE_PESAN & txtNama.Text & ": " & txtPesan.Text, False
End If
Else
'Jika anda tersambungkan ke server, kirimkan pesan itu kepada server.
If chkPrivate.Value = vbChecked Then
'Pesan pribadi -hanya untuk para pemakai yang terpilih.
'Lihat yang terpilih di dalam kotak daftar dan kirimkan pesan kepada mereka.
For i = 0 To Pengguna.ListCount - 1
If Pengguna.Selected(i) = True Then
' string dari daftar pesan para pemakai akan dikirimkan.
'string ini akan diuraikan oleh server, yang akan mengalihkan pesan.
sUsers = sUsers & sFormatSend(Pengguna.ItemData(i))
'hitung pesan para pemakai yang sedang dikirim
'Ini diperlukan sehingga server mengetahui bagaimana caranya menguraikan string.
iCount = iCount + 1
End If
Next i
'Jika daftar tidak kosong, kirimkan pesan kepada server
If iCount <> 0 Then
SendToServer SCK_CODE_PRIVATE_MESSAGE & sFormatSend(iCount) & sUsers & "*"
& txtNama.Text & "*: " & txtPesan.Text
End If
Else
pesan untuk semua pengguna.
SendToServer SCK_CODE_PESAN & txtNama.Text & ": " & txtPesan.Text
End If
End If
If chkPrivate.Value = vbChecked Then
Update dialog pesan.
UpdateDialog "*" & txtNama.Text & "*: " & txtPesan.Text
Else
'Update dialog pesan.
UpdateDialog txtNama.Text & ": " & txtPesan.Text
txtPesan.Text = ""
On Error Resume Next
txtPesan.SetFocus
End If
kosongkan kotak pesan.
txtPesan.Text = ""
End Sub

Private Sub cmdEXIT _Click()

Keluarkan aplikasi.
Unload Me
End Sub

Private Sub tmrSendData_Timer()


' pengatur waktu secara terus-menerus memeriksa data yang dikirim.
' mengingatkan sesuatu yang sudah dikirim.
' Hanya sebagian dari data dapat dikirim pada waktu yang sama, jika tidak data berjalan bersamasama
Dim bSent As Boolean
' variabel indeks untuk menentukan sebagian dari antrian data yang akan dikirim.
Dim iSend As Long
'Ingat di mana data itu akan dikirim.
Dim iConnection As Integer
'Mulailah variabel indeks pada 1.
iSend = 1
'ulang selagi tidak ada apa pun yang dikirim dan selagi variabel indeks kurang dari maksimum.
Do While bSent = False And iSend <= mSendTo.Count
If mSendTo.Item(iSend) = "sckConnect" And sckConnect.State = sckConnected Then
Cek untuk melihat jika itu untuk dikirim ke server dan pastikan koneksi itu masih terbuka.
Kirimkan data.
sckConnect.SendData mSendList.Item(iSend) & vbCrLf
panjang pengiriman data.
ShowSentData "sckConnect: " & mSendList.Item(iSend)
'Hapus data dari antrian.
mSendTo.Remove iSend
mSendList.Remove iSend
'Sesuatu yang sudah dikirim.
bSent = True
ElseIf Mid(mSendTo.Item(iSend), 1, 13) = "sckConnection" Then
'Cek untuk melihat jika itu untuk dikirim kepada salah satu koneksi-koneksi kepada server.
'Menguraikan kalimat string berisi nama dari koneksi itu untuk menentukan koneksi yang mana
dikirimkan.
iConnection = Mid(mSendTo.Item(iSend), 15, Len(mSendTo.Item(iSend)) - 15)
'Pastikan bahwa koneksi terbuka.
If sckConnection(iConnection).State = sckConnected Then
' Kirimkan data.
sckConnection(iConnection).SendData mSendList.Item(iSend) & vbCrLf
panjang pengiriman data.
ShowSentData "sckConnection(" & iConnection & "): " & mSendList.Item(iSend)
'Hapus data dari antrian.
mSendTo.Remove iSend
mSendList.Remove iSend

'Sesuatu yang sudah dikirim.


bSent = True
End If
End If
Hitung variabel index.
iSend = iSend + 1
Loop
End Sub

C; Cara Menggunakan Program


Setelah code diatas telah dimasukkan semua, maka compilelah program diatas menjadi exe,
dengancara Klik menu File>Make MultiChat.exe

Setelah berhasil disimpan, coba buka 3 kali program tersebut dalam satu komputer.

Masukkan nama server, klien1, klien2 pada aplikasi tersebut, untuk server tekan tombol Server dan
untuk klien tekan tombol Klien. Cobalah untuk mengirim pesan melalui server dan pesan akan
diterima oleh seluruh klien.

Untuk membuat pesan pribadi pada seseorang pilihlah nama pada bagian daftar pengguna dan
centanglah Pesan Pribadi.

Untuk penggunaan dalam jaringan anda harus memasukan IP komputer server baik pada server
maupun klien.

Anda mungkin juga menyukai