Sabtu, 06 Oktober 2012

Pengetahuan Dasar Network Programming (socket programming)

Network programming perlu kita pelajari sebab microcontroller   yg ada  sekarang selain berkomunikasi dgn RS232/rs485 juga sudah banyak yang menggunakan komunikasi  LAN dan internet.  Sehingga dengan begitu microcontroller bisa diakses/dikendalikan dari PC lewat LAN  dan juga bisa lewat internet.

Control via internet
Network Layer

Layer network
Gambar dibawah ini untuk mengingatkan kembali, bagaimana paket data/pesan mesti melalui  lapisan lapisan  supaya  sampai ke tujuan.

network Layer
Untuk sampai ketujuan pesan (paket data) yg kita kirim harus melalui beberapa tahap/layer:
- Lapisan aplikasi : aplikasi  FTP, SMTP, HTTP  : aplikasi chating ,catur online, mozilla dll
-Lapisan transport: process-process data transfer yaitu  TCP dan  UDP
-Lapisan Internet:  membuat rute   datagrams dari  sumber ke tujuan : IP digunakan mencari  rute
-Lapisan Network Interface: data transfer PPP, Ethernet
-Lapisan Phisik:  pengiriman bit per bit  (5 volt atau o volt)
Apa itu  Socket ?  : untuk mencapai tujuan perlu alamat jelas……
Socket adalah gabungan alamat ip dan nomor port.

socket
Berikut ini  contoh aplikasi yg berkomuniaksi lewat LAN atau internet dlm kehidupan sehari hari:
Ada 2 orang yang sedang chating  sambil chating kedunya juga bermain program catur online .

contoh 2 aplikasi network mempunyai no port berbeda
Untuk  mencapai tujuan,paket  data masing masing aplikasi mempunyai alamat PC  yg dituju dan alamat aplikasi yg dituju.  Alamat PC berupa IP adress dan alamat aplikasi (prosses) berupa nomor port (port yang dimaksud disini bukan port yg ada di microcontroller ).    Kombinasi  IP adress dan nomor port  disebut socket.  Aplikasi dalam contoh gambar di atas yaitu program Catur online  dan Chating

Socket = alamat IP + alamat aplikasi (port)
Socket bisa juga dianalogikan  dengan  sebuah alamat kartu  pos jika kita ingin mengirim surat,  maka kita perlu alamat rumah dan nama si penerima ,karena di alamat rumah yg dituju dihuni   beberapa orang. Jika  hanya alamat rumah saja nanti suratnya , maka tdk akan sampai kepada orang yg dituju.
alamat rumah = IP adress
nama orang yg dituju =  nomor  port
Keterangan ttg Nomor Port:
• Nomor Port  terdiri dari  16 bit integer  :  0 ~ 65,535.
• Server harus menetapkan sebuah nomor port.
• Client program  menentukan  dirinya sebuah epheral nomor port  epheral.
• IANA (Internet Assigned Number Authority)  membagi nomor port
menjadi  3 :
1. no Port  0 sampai  1023 , ditetapkan dan di control oleh
IANA. misal:  no port 23 untuk FTP, 25  untuk  SMTP dan 80 untuk HTTP.
2.nomor port  1024  sampai 49,151   tidak dicontrol oleh  IANA,
tapi dapat di tetapkan penggunaanya oleh IANA.
3. nomor port dinamis 49,152  sampai  65,535  dapat digunakan  untuk proses apa saja disebut juga  epheral port.
Client-Server  :  siapa yang mulai  meminta dilayani , siapa yg melayani..
Jika ada 2 aplikasi yg saling berkomunikasi  maka salah satu aplikasi harus ada yg  memulai dan yg lain menunggu / siap merespon  komunikasi. fihak yg aktif memulai di sebut sebagai client dan fihak yg  passive menunggu (siap merespon) disebut server.
jadi yang dimaksud client dan server  komunikasi jaringan adalah sebuah aplikasi/program  bukan berupa  hardware .
Karakteristik aplikasi Client
• Diaktifkan oleh user.
• Dijalankan di lokal komputer
• Berinisiatif  sebagai fihak yang memulai  menghubungi server
• Tidak perlu  special hardware atau OS khusus.
Karakteristik aplikasi  Server
• dapat melayani banyak client dalam satu saat.
• program otomatis aktif ketika komputer dinyalakan dan siap melayani permintaan client.
• berjalan di komputer yg disharing( bukan personal komputer).
• Pasive menunggu di kontak oleh client.
• membutuhkan powerful hardware dan OS khusus (misal windows server 2008),  karena harus melayani banyak client.
TCP  atau UDP :  pesan harus sampai  atau yang penting pesan sudah ku sampaikan…
Pesan yang akan kita kirim apakah harus sampai ke tujuan atau yg penting sudah kita kirim sampai atau tdk , tdk terlalu penting artinya ada kemungkinan pesan tdk diterima .
jika pesan harus (wajib) sampai ke si penerima maka kita pilih TCP
jika pesan tdk harus sampai, atau ada kemungkinan tdk diterima kita pilih UDP.
antara TCP dan UDP ada kekurangan dan kelebihannya masing-masing penggunaanya tergantung kebutuhan tiap aplikasi.
TCP mempunyai  transport layer  identitas  6 dan  UDP : 17
Kalau boleh saya umpamakan pesan dgn TCP itu seperti menghubungi orang lain  dgn   handphone   pasti terhubung atau tidak sama sekali.
Kalau UDP itu seperti menghubungi orang2 dengan speaker Toa di mesjid , Bgini contohnya “kepada bapak2 pengurus DKM harap kumpul dimesjid akan ada rapat malem ini”.  Kita tidak tahu pesan  pengumuman tsb sampai atau tdk , krn bapak2 yg dimaksud  mungkin ada yg di rumah atau  ada yg masih  di kantor.
UDP

UDP
TCP :

TCP

penggunaan socket dlm jaringan
Mekanisme Komunikasi antara Client  dan Server 
Jika data bebentuk Stream (TCP)

komunikasi antara client server
Proses komunikasi Client server protokol  TCP  pada  pemrograman C# :

client server TCP dgn C#
Jika menggunakan Datagram (UDP)

mekanisme protokol UDP
Contoh Pemrograman Network dengan C#
Contoh Code Client UDP

kolom alamat IP Host atau server jika server berada dlm 1 PC dgn client isi dgn localhost atau 127.0.0.1
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
private void button1_Click(object sender, System.EventArgs e)
{
UdpClient udpClient = new UdpClient();
udpClient.Connect(tbHost.Text, 8080);
Byte[] sendBytes = Encoding.ASCII.GetBytes(“Hello World?”);
udpClient.Send(sendBytes, sendBytes.Length);
}
Contoh Code Server UDP

.
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
public void serverThread()
{
UdpClient udpClient = new UdpClient(8080);
while(true)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any,0);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
string returnData = Encoding.ASCII.GetString(receiveBytes);
lbConnections.Items.Add(RemoteIpEndPoint.Address.ToString() + “:” +returnData.ToString());
}
}
private void Form1_Load(object sender, System.EventArgs e)
{
Thread thdUDPServer = new Thread(new ThreadStart(serverThread));
thdUDPServer.Start();
}

Pengetahuan Dasar Pemrograman Thread di C#

C# memungkinkan kita mengeksekusi  code secara  parallel melalui  multi-threading.
Apa yang dimaksud dgn thread?
Thread adalah potongan kode yg independent (dari sebuah proses)  yang di ekseskusi oleh CPU yg penjadwalanya di lakukan oleh Operating sytem.
Perbedaan Multi-Tasking dan Multi-treading
Multitasking adalah beberapa aplikasi/program yang dijalankan secara paralel (sebenarnya sih dijalankan bergantian secara cepat) oleh operating system contohnya anda menjalankan program ms.excel sambil  membuka program  musik WinAmp .  Kita merasakan program  excel dan winamp berjalan bersamaan , padahal sebenarnya CPU diperintahkan oleh  OS mengeksekusi  program excel dan winamp secara bergantian dgn kecepatan tinggi.
Multi-treading adalah beberapa tread potongan program dlm satu aplikasi/proses yang dilaksana secara paralel (sebenernya sih bergantian secara cepat( kecuali prosesornya multi core). Contohnya adalah sebuah program server misal chat server maka ia harus melayani permintaan client  yang datang hampir bersamaan secara paralel. server akan membuat thread untuk melayani tiap client yg datang. setiap client dilayani oleh satu thread. sehingga tidak ada antrian jika client yang datang banyak.
Untuk melihat Prosses dan thread yang sedang aktif di OS windows anda bisa menekan Alt+Ctrl+Del  klik menu Task Manager maka akan tampil sbb:
(jika kolom thread tdk tampak , klik menu View ->select colom->di centang/check  thread count.)

Daftar Proses dan jumlah threadnya pada OS windows
Perumpamaan lain multi-threading adalah  Koki di restoran  yang mempunyai anak buah. Untuk setiap pelanggan dilayani oleh 1 anak buah jadi pelanggan tdk perlu menunggu lama. Koki nya adalah program/proses, anak buah kokinya adalah thread.

ilustrasi perbandingan mono thread  dan multi thread

Beberapa contoh manfaat Thread

 - Pada user interface
Sebuah proses dlm program biasanya berurutan  spt ini:
Input data->proses data->menampilkan data.
tiap  proses bisa jadi memakan waktu lama.  jika tiap proses di atas masing masing dibuatkan sebuah thread maka  ketika  data sedang di proses input data bisa tetap berlangsung dan ketika proses data sedang berlangsung bisa juga di cancel karena proses diatas berjalan secara paralel.
- Pada aplikasi  server
Misalkan aplikasi webserver , aplikasi ini melayani permintaan page untuk tiap permintaan client yg datang. Tiap client yang datang dilayani oleh 1 thread . jika pada saat yg hampir bersamaan datang 10 client maka akan dibuatkan 10 thread yg melayani secara bersamaan.
Contoh ilustrasi : mencuci tumukan gelas dan piring secara bersamaan
kita buatkan 2 thread . 1 thread untuk mencuci piring dan 1 thread untuk mencuci gelas. sehingga gelas dan piring dicuci  secara paralel.
Program mencuci  tumpukan gelas dan tumpukan piring dgn threading
using System;
using System.Threading;
public class MyThread {
public static void Thread1() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
Thread.Sleep(3000);
}
}
public static void Thread2() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
Thread.Sleep(3000);
}
//Thread.Sleep(3000);
}
}
public class MyClass {
public static void Main() {
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1 ) );
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2 ) );
tid1.Start();
tid2.Start();
}
}
Memang jika di lihat hasil  di layar monitor terlihat secara selang seling, tapi secara tdk terlihat  ke 2 thread di proses paralel.

hasil multithreading di monitor
Hasil program diatas adalah : piring dan gelas di cuci secara bersamaan dan selesai  secara bersamaan.
Kalau program diatas tanpa threading maka hasilnya akan berurutan mencuci gelas sampai selesai baru kemudian mencuci piring sampai selesai.
Program mencuci tumpukan gelas dan piring tanpa threading:
using System;
using System.Threading;
public class non_Thread {
public void cuci_gelas() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
}
}
public void cuci_piring() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
}
}
}
public class MyClass {
public static void Main() {
Console.WriteLine(“=======================================”);
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Console.WriteLine(“=======================================”);
non_Thread tid1 = new non_Thread();
tid1.cuci_gelas();
tid1.cuci_piring();
Console.WriteLine(“=======================================”);
Console.WriteLine(” Selesai…nyucinya ! “);
Console.WriteLine(“=======================================”);
}
}

program tanpa threading
Hasil dari program diatas adalah: gelas  dicuci  lebih dahulu sampai selseai  kemudian disusul piring.
Cara penulisan Thread
Sumber

0 komentar:

Posting Komentar

 
Copyright ELEKTRONICA MIKROKONTROLER All Rights Reserved
Powered by Alat Rekaman
ProSense theme created by Dosh Dosh and The Wrong Advices.
Blogerized by Bonard Alfin Forum Distorsi.