Selasa, 06 Desember 2011

Belajar Winsock Membuat aplikasi chat sederhana

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

    Objek Winsock
    Label
    2 TextBox
    CommandButton

Source code lengkap aplikasi server :
01    Option Explicit
02   
03    Private Sub cmdSend_Click()
04        Winsock1.SendData txtChat.Text
05        DoEvents
06   
07        txtMain.Text = txtMain.Text & vbCrLf & txtChat.Text
08        txtChat.Text = ""
09    End Sub
10   
11    Private Sub Form_Load()
12        Winsock1.LocalPort = 11111
13        Winsock1.Listen
14    End Sub
15   
16    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
17        'reset the socket, and accept the new connection
18        Winsock1.Close
19        Winsock1.Accept requestID
20    End Sub
21   
22    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
23        Dim strData As String
24   
25        'get the data and display it in the textbox
26        Winsock1.GetData strData
27        txtMain.Text = txtMain.Text & vbCrLf & strData
28        txtMain.SelStart = Len(txtMain.Text)
29    End Sub

Aplikasi server tinggal duduk maniz :D dan menunggu koneksi yang masuk.

Source code lengkap aplikasi klien :
01    Option Explicit
02   
03    Private Sub Form_Load()
04        'set up the Winsock1 to connect to the local computer
05        Winsock1.RemoteHost = "127.0.0.1"
06        Winsock1.RemotePort = 11111
07        Winsock1.Connect
08    End Sub
09   
10    Private Sub cmdSend_Click()
11        'send the data thats in the text box and
12        'clear it to prepare for the next chat message
13        Winsock1.SendData txtChat.Text
14        DoEvents
15   
16        txtMain.Text = txtMain.Text & vbCrLf & txtChat.Text
17        txtChat.Text = ""
18    End Sub
19   
20    Private Sub Winsock1_Connect()
21        'we are connected!
22        MsgBox "Connected"
23    End Sub
24   
25    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
26        Dim strData As String
27   
28        ' get the data from the socket
29        Winsock1.GetData strData
30        ' display it in the textbox
31        txtMain.Text = txtMain.Text & vbCrLf & strData
32        ' scroll the box down
33        txtMain.SelStart = Len(txtMain.Text)
34    End Sub
35   
36    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)
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

Tidak ada komentar:

Posting Komentar