Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Belajar Winsock Bagian 1 - Intro

| 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 :

1
2
3
4
5
6
7
8
9
10
11
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() :

1
2
3
4
5
6
7
8
9
10
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).

1
2
3
4
5
6
7
8
9
10
11
12
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.

1
2
3
4
5
6
7
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 :

  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) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 :

  1. http://www.winsockvb.com sayangnya situs ini sekarang sudah offline

  2. Tugas Akhir saya membuat billing warnet di bla bla

Comments