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.
Network Layer
Gambar dibawah ini untuk mengingatkan kembali, bagaimana paket data/pesan mesti melalui lapisan lapisan supaya sampai ke tujuan.
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.
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 .
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 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.
• 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.
• 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.
• 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
TCP :
Mekanisme Komunikasi antara Client dan Server
Jika data bebentuk Stream (TCP)
Proses komunikasi Client server protokol TCP pada pemrograman C# :
Jika menggunakan Datagram (UDP)
Contoh Pemrograman Network dengan C#
Contoh Code Client UDP
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
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);
}
{
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;
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());
}
}
{
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();
}
thdUDPServer.Start();
}
Ditulis dalam Dasar Pemrograman
4 Komentar
Pengetahuan Dasar Pemrograman Thread di C#
Posted by pccontrol
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.)
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.
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;
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);
}
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);
}
}
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 “);
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1 ) );
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2 ) );
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2 ) );
tid1.Start();
tid2.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 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;
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);
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);
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(“=======================================”);
Console.WriteLine(“=======================================”);
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Console.WriteLine(“=======================================”);
non_Thread tid1 = new non_Thread();
tid1.cuci_gelas();
tid1.cuci_piring();
tid1.cuci_piring();
Console.WriteLine(“=======================================”);
Console.WriteLine(” Selesai…nyucinya ! “);
Console.WriteLine(“=======================================”);
Console.WriteLine(” Selesai…nyucinya ! “);
Console.WriteLine(“=======================================”);
}
}
}
Hasil dari program diatas adalah: gelas dicuci lebih dahulu sampai selseai kemudian disusul piring.
Cara penulisan Thread
Sumber
Ditulis dalam Dasar Pemrograman, Pemrograman C# ( si sharp), Xpert-1