Jumat, 07 Februari 2014

Pemrograman Socket Bag.1 - (Dasar)

Kali ini kita akan membuat aplikasi client – sever sederhana menggunakan bahasa pemrograman Visual C# 2008. Program yang akan kita buat ini mungkin adalah cara yang paling sederhana atau dasar dalam pemrograman socket.

Seperti biasanya, anda juga dapat men-download secara lengkap source code aplikasi ini yang akan saya berikan di akhir tutorial, dan anda dapat langsung menjalankan program aplikasi ini tentunya setelah anda mengubah beberapa nama string yang ada, sesuai dengan nama project pada jendela Solution Explorer.

Tanpa basa basi lagi mari kita mulai pembuatan aplikasi client server menggunakan C# ini.

1. Kode Program Server

Tahap 1: Buat project C# baru bertipe Console Application.

Tahap 2: Tambahkan namespace yang diperlukan :
    1 using System;
    2 using System.Collections.Generic;
    3 using System.Linq;
    4 using System.Text;
    5 
    6 using System.Net;
    7 using System.Net.Sockets;

Tahap 3: Tuliskan program di dalam method main. Dan untuk memudahkan, gunakan saja IP Localhost (127.0.0.1) sebagai IP Address yang aktif (Kalau NIC komputer anda ada yang aktif dan sudah memiliki IP Address yang valid, anda bisa saja menggunakannya). Disamping itu, untuk menjebak kesalahan, tuliskan kode program di dalam blok “try... catch...” :
   17   IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
   18 
   19   //Inisialisasi Listener, dan disini kita menggunaan nomor port 9999
   20   TcpListener tcpListener = new TcpListener(ipAddress, 9999);
   21 
   22   //Mulai Listening pada port yang telah ditentukan tersebut
   23   tcpListener.Start();

Tahap 4: Tampilkan pesan ke layar konsol server bahwa server sudah running dan dalam status Listening atau menunggu koneksi dari client :
   26   Console.WriteLine("Server running...");
   27   Console.WriteLine("Local end point : " + tcpListener.LocalEndpoint);
   28   Console.WriteLine("Waiting for connections...");

Tahap 5: Buat Socket untuk menerima koneksi dari client :
   31   Socket sock = tcpListener.AcceptSocket();
   32   Console.WriteLine("Connection accepted from " + sock.RemoteEndPoint);
   33 
   34   byte[] b = new byte[100];
   35   int k = sock.Receive(b);
   36   Console.WriteLine("Received...");
   37 
   38   for (int i = 0; i < k; i++)
   39   {
   40       Console.WriteLine(Convert.ToChar(b[i]));
   41   }

Tahap 6: Kirim pesan balik ke client bahwa koneksi dengan server telah sukses dilakukan :
   44   ASCIIEncoding ASCen = new ASCIIEncoding();
   45   sock.Send(ASCen.GetBytes("Automatic message: String received by server !"));
   46 
   47   Console.WriteLine("\nAutomatic message sent !");
   48   Console.WriteLine("\nPress Enter to exit...");
   49   Console.ReadLine();

Tahap 7: Terakhir, tutup socket dan hentikan Listening request koneksi
   52   sock.Close();
   53   tcpListener.Stop();

Tahap 8: Tampilkan pesan kesalahan di layar console jika terjadi kesalahan
   57   Console.WriteLine("Error : " + ex.StackTrace);


2. Kode Program Client

Tahap 1: Tambahkan namespace yang diperlukan :
    1 using System;
    2 using System.Collections.Generic;
    3 using System.Linq;
    4 using System.Text;
    5 
    6 using System.IO;
    7 using System.Net;
    8 using System.Net.Sockets;

Tahap 2: Tuliskan kode program dalam method main. Dan tempatkan kode tersebut di dalam blok “try... catch...”. Disini kita membutuhkan TcpClient dan Stream :
   16   try
   17   {
   18   TcpClient tcpClient = new TcpClient();
   19   Console.WriteLine("Connecting...");
   20 
   21   //Gunakan IP Address dan Port yang sama dengan server
   22   tcpClient.Connect("127.0.0.1", 9999);
   23 
   24   Console.WriteLine("Connected...");
   25   Console.WriteLine("Enter the string to be sent : ");
   26 
   27   String str = Console.ReadLine();
   28   Stream stm = tcpClient.GetStream();
   29   }

Tahap 3: Ketika server menerima pesan dari client, server mengkonversi nya dari ASCII. Nah begitu juga ketika client akan mengirim pesan ke server, maka data harus diubah menjadu ASCII :
   30   //Ubah data yang akan dikirim menjadi byte
   31   ASCIIEncoding ASCen = new ASCIIEncoding();
   32   byte[] ba = ASCen.GetBytes(str);
   33   Console.WriteLine("Sending...");
   34 
   35   stm.Write(ba, 0, ba.Length);
   36 
   37   byte[] bb = new byte[100];
   38   int k = stm.Read(bb, 0, 100);
   39 
   40   for (int i = 0; i < k; i++)
   41   {
   42       Console.Write(Convert.ToChar(bb[i]));
   43   }

Tahap 4: Tutup TcpClient dan tampilkan pesan info di layar konsol client :
   46   tcpClient.Close();
   47 
   48   Console.WriteLine("Press Enter to Exit...");
   49   Console.ReadLine();

Tahap 5: Lengkapi kode di blok “catch” :
   53   Console.WriteLine("Error : " + ex.StackTrace);

Kita telah menyelesaikan pembuatan program aplikasi client server ini. Untuk mencobanya silahkan download source code-nya disini, kemudian jalankan terlebih dahulu program server, baru kemudian program client.


3. Menjalankan Program
Ada 2 cara untuk menjalankannya, cara 1 bisa langsung menekan tombol Start Debugging (memerlukan pengaturan di Solution Properties -> Multiple StatUp Projects). Cara 2 dengan terlebih dahulu memilih menu Build -> Build Solution, kemudian di folder ..\bin\Release masing-masing project jalankan satu persatu file .exe yang berhasil dibentuk, mulai dari server terlebih dahulu, kemudian baru diikuti client.  

Cara 1:
 Cara 2:

 

Selamat mencoba !!!

3 komentar:

  1. permisi gan, saya ada sedikit tulisan mengenai protokol websocket dalam beberapa bahasa pemrograman berikut gan: http://datacomlink.blogspot.com/2015/11/implementasi-server-websocket-rfc-6455.html ditunggu feedbacknya ya gan, semoga menambah wawasan bersama gan, terima kasih...

    BalasHapus
    Balasan
    1. Mantep gan.
      Programmer sejati ya gan ? he..he...
      Kalo dibanding dengan tutorial ini mah, gak ada apa2nya ? he..he..
      Ini cuma dasar-dasar nya saja..
      Thanks telah berkunjung...

      Hapus
    2. :D mungkin bukan pak, pengen jadi dosen dan peneliti aja pak :D terima kasih juga pak udah berkunjung balik, :D

      Hapus