Label

Tampilkan postingan dengan label sistem client server. Tampilkan semua postingan
Tampilkan postingan dengan label sistem client server. Tampilkan semua postingan

Minggu, 09 Juni 2013

Pembuatan game domino menggunakan GameMaker (UAS SCS)

Pembuatan Game menggunakan Game maker Versi 8.1
permainan Game domino sample.





package game;

import java.util.ArrayList;
import java.util.Random;
public class Game{
public static void main(String args[]){

ArrayList<int []> tiles = new ArrayList<int []>();
Random gen = new Random();

for(int i=0;i<7;i++){
for(int j=0;j<7;j++){
tiles.add(new int[]{i,j});
System.out.print("("+ i + ", " + j + ") ");
}
System.out.println();
}

int [][] player1_tiles = new int[7][49];
int [][] player2_tiles = new int[7][49];
int [] tile1 = null;
int [] tile2 = null;

for(int i=0;i<player1_tiles.length;i++){

tile1 = tiles.get(gen.nextInt(tiles.size()));
tile2 = tiles.get(gen.nextInt(tiles.size()));
tiles.remove(tile1);
tiles.remove(tile2);

player1_tiles[i] = tile1;
player2_tiles[i] = tile2;
}

System.out.println("\nTile\tPlayer 1\tPlayer 2");
for(int i=0;i<player1_tiles.length;i++){
System.out.print((i+1) +": \t ");
for(int j=0;j<player1_tiles[i].length;j++){
System.out.print(player1_tiles[i][j] + " ");
}
System.out.print("\t\t");

for(int j=0;j<player2_tiles[i].length;j++){
System.out.print(player2_tiles[i][j] + " ");
}

System.out.println();
}
System.out.println();
if(tile1[0]>tile2[1] && tile1[1]>tile2[1]){
System.out.println("player 1 drops first");
}else{
System.out.println("player 2 drops first");

}
}
}

COBRA

Common Object Request Broker Architecture (CORBA) 
adalah teknologi yang dipergunakan untuk heterogeneous computing (sistem komputer dengan berbagai macam
lingkungan). CORBA pada dasarnya menggunakan arsitektur client-server dimana klien dan server berupa objek. CORBA mendukung apa yang disebut interoperabilitas, yaitu kemampuan saling bekerjasama antar sistem computer.

CORBA berbeda dengan RMI, berikut perbedaan CORBA dengan RMI:
CORBA adalah dapat diimplementasikan dengan sembarang bahasa pemrograman.
CORBA terdiri dari beberapa mekanisme dimana RMI dapat termasuk di dalamnya.
Pada RMI tidak menggunakan ORB (Object Request Broker).

Kenapa ada CORBA?
Dapat menangani keberagaman lingkungan antara klien dan server (dapat diimplementasikan pada bahasa pemrograman yang berbeda). Hal ini karena CORBA menggunakan apa yang disebut antarmuka (interface) untuk menjembatani dua buah lingkungan yang berbeda.

Object Request Broker (ORB) merupakan inti dari CORBA dan bertanggung jawab untuk menjalankan semua mekanisme yang dibutuhkan, yaitu:
Menemukan implementasi objek untuk memenuhi suatu request
Menyiapkan implementasi objek untuk menerima suatu request
Melakukan komunkasi data untuk memenuhi suatu request
Sebuah permintaan (request) yang dikirimkan suatu client ke suatu object implementation akan melewati ORB. Dengan ORB, yang terdiri dari interface, suatu client dapat berkomunikasi dengan object implementation tanpa adanya batasan platform, teknologi jaringan, bahasa pemrograman, dan letak objek. Dengan menggunakan ORB, objek client bisa meminta sebuah method pada sebuah object server yang bisa saja terdapat dalam satu mesin maupun jaringan yang berbeda. ORB menerima panggilan dan menemukan objek yang bisa mengimplementasikan permintaan, mengirim parameter, invoke method, dan mengembalikan hasil yang diperoleh.

Objek-objek CORBA dispesifikasikan menggunakan interface, yang merupakan penghubung anatara client dan server. Interface Definition Language (IDL) digunakan untuk mendefinisikan interface tersebut. IDL menentukan tipe-tipe suatu objek dengan mendefinisikan interface-interface objek tersebut. Sebuah interface terdiri dari kumpulan operasi dan parameter operasi tersebut. IDL hanya mendeskripsikan interface, tidak mengimplementasikannya. Meskipun sintaks yang dimiliki oleh IDL menyerupai sintaks bahasa pemrograman C++ dan Java., perlu diingat, IDL bukan bahasa pemrograman.

CORBA mendefinisikan IIOP (Internet Inter-ORB Protocol) untuk mengatur bagaimana objek berkomunikasi melalui jaringan. IIOP merupakan open protocol yang berjalan diatas TCP/IP.

Pada Java, CORBA merupakan pelengkap untuk menyediakan framework distribusi objek, services pendukung framework itu, dan kemampuan antar operasi dengan bahasa pemrograman lainnya. CORBA untuk client-server menggunakan protokol IIOP (Internet InterORB Protocol) untuk komunikasi antara server dan klien.


Skeletons adalah bagian kode yang dibangin pada kode implementasi server pada antarmuka (interface). Stub adalah bagian kode yang membuat antarmuka (interface) dapat diakse (available) oleh klien.

Java menyediakan ORB (Object Request Broker) yang mendukung teknologi CORBA. ORB adalah komponen runtime yang dapat digunakan untuk distributed computing menggunakan komunikasi IIOP. OMG (Object Management Group) adalah industri yang membuat spesifikasi dan mempublikasikan CORBA.

Java IDL (Interface Definition Langauge) merupakan sebuah teknologi untuk distribusi
objek yang berinteraksi antar platform. CORBA menggunakan IDL untuk membuat antarmuka (interface). Java IDL adalah implementasi dari teknologi antarmuka pada CORBA. Model pemrograman IDL atau biasa disebut Java IDL terdiri dari ORB CORBA dan kompiler idlj yang memetakan OMG IDL ke Java dengan menggunakan Java CORBA ORB. Aplikasi CORBA dibuat dengan menggunakan IDL untuk mendefinisikan antarmuka objek agar dapat diakses oleh klien maupun server.

probabilitas

Sebelum Anda melakukan trading yang sebenarnya, ada baiknya bila kita membahas masalah probabilitas secara lebih mendalam sekali lagi guna memaksimalkan teknik Anda di dalam melakukan trading.
Pada bab sebelumnya telah diberikan illustrasi kasus mengenai probabilitas dengan pelemparan koin secara acak untuk mendapatkan suatu data statistik tentang kemungkinan muka koin yang akan muncul di tangan kita. Apakah kita akan mendapatkan sisi koin yang bergambar atau sisi koin yang menunjukkan angka.
Pada pelemparan koin, kita hanya akan mendapatkan 2 kemungkinan atas apa yang kita lakukan terhadap koin tersebut, yaitu gambar atau angka.
Di dalam pendekatan statistik, probabilitas yang akan kita dapatkan adalah sama. Bila Anda melempar koin tersebut, Anda dapat mencatat berapa kali muncul gambar dan berapa kali muncul angka. Dari catatan yang Anda dapatkan mungkin Anda akan merasa bahwa eksperimen yang Anda lakukan merupakan suatu bentuk perjudian sederhana. Namun demikian apa yang Anda lakukan tersebut merupakan suatu eksperimen yang baik tentang probabilitas.
Jika Anda melakukan eksperimen pelemparan koin, misalkan saja, sebanyak 10 kali, maka berikut adalah kemungkinan data berapa kali sisi gambar akan muncul dan berapa kali sisi angka akan muncul:
Gambar
Angka
10
0
9
1
8
2
7
3
6
4
5
5
4
6
3
7
2
8
1
9
0
10
Dari tabel di atas, menurut Anda. manakah sisi koin yang paling berpeluang muncul dari pelemparan koin sebanyak 10 kali? Sekarang coba Anda amati tibel di atas. Di situ nampak bahwa kita akan mendapatkan suatu kombinasi probabilitas yang sama antara peluang munculnya sisi gambar dan sisi angka.
Jika Anda ingin menguji sekali lagi apa yang telah Anda lakukan dengan meminta tolong orang lain untuk melakukan hal yang sama seperti yang Anda lakukan, cobalah Anda bandingkan antara data yang Anda dapatkan dengan data yang didapatkan orang tersebut. Apakah Anda mendapatkan hasii yang sama?
Pertanyaan di atas adalah harus Anda kemukakan ketika Anda ingin mempelajari lebih lanjut tentang probabilitas. Kita akan membahas bersama untuk mengkaji lebih lanjut tentang probabilitas ini.
Ketika Anda melakukan pelemparan koin tersebut sebanyak 1 kali, atau sebanyak 10 kali, maka jawaban yang akan kita dapatkan tentang probabilitas adalah sama, karena masing-masing sisi koin memiliki peluang yang sama, untuk muncul. Dengan kondisi ini kita telah mendapatkan suatu prediksi tentang probabilitas sisi koin mana yang akan muncul. Jika misalnya koin tersebut cacat sehingga pada saat kita lemparkan ternyata sisi tertentu dari koin menjadi lebih sering muncul maka kita akan kesulitan untuk melakukan prediksi. Sekilas hal ini tampak aneh dan kontradiktif, karena dengan adanya cacat pada koin maka kita harus mempelajari perilaku atau karakter dari koin yang cacat itu. Jika kita melemparkan koin cacat tersebut sebanyak 1000 kali, misalnya, maka bisa jadi kita akan mendapatkan sisi gambar muncul sebanyak 700 kali dibanding sisi angka sebanyak 300 kali. Jika hal itu yang terjadi maka biasanya kita akan segera berkesimpulan bahwa kita dengan mudah dapat memprediksikan hasil pelemparan koin cacat tersebut, meskipun kenyataan tidaklah demikian. Sekali lagi kita harus mengerti dan memahami karakter dari koin cacat tersebut sebelum kita melakukan prediksi dan itu tidak semudah jika kita melakukannya terhadap koin yang tidak cacat.
Dari uji coba pelemparan koin di atas kita mencatat bahwa hasil dari setiap pelemparan koin merupakan suatu peristiwa independen. Tidak ada faktor apapun yang mempengaruihi hasil dari uji pelemparan koin. Berapa kalipun Anda melakukan uji pelemparan, angka probabilitas sisi koin mana yang akan muncul adalah sama. Koin tersebut tidak akan “mengingat” hasil akhir pelemparan sebelumnya. Juga tidak bisa ditentukan sisi mana yang akan muncul pada pelemparan berikutnya. Ini adalah suatu peristiwa yang benar-benar independen.
Akan lain halnya jika kita mengambil suatu contoh kasus lain tentang peristiwa uji coba yang bersifat tidak independen. Katakanlah kita melakukan uji coba terhadap 20 biji kelereng, 19 kelereng berwarna hijau dan hanya 1 yang berwarna merah, dengan ukuran dan berat yang benar-benar sempurna sama. Ketika kita memasukkan semua kelereng tersebut ke dalam sebuah toples lalu kita mencoba mengambil kelereng berwarna merah dengan mata tertutup, berapakah probabilitas keberhasilan kita untuk mendapatkan kelereng merah tersebut? Ketika Anda mulai mengambil kelereng merah tersebut, angka probabilitas yang kita hadapi adalah 1 banding 20. Pada pengambilan pertama bisa jadi kita akan gagal dan kemudian kita mencoba lagi. Kali ini dengan perbandingan 1 banding 19 kerena jumlah kelereng sudah berkurang satu.
Jika kita terus mencoba untuk mengambil kelerengmerah dengan cara yang sama, dan ketika Anda berhasil mengambil kelereng merah sementara yang masih tersisa hanya beberapa biji kelereng hijau, maka permainan telah berakhir. Namun jika Anda gagal dan Anda tidak mengganti kelereng hijau yang terambil dengan kelereng berwama merah maka probabilitasnya adalah sama. Kecuali jika Anda melanjutkan pengambilan kelereng tersebut hingga jumlah kelereng di dalam toples tersebut terus berkurang hingga akhimya menyisakan satu kelereng saja. Dalam hal demikian bukanlah probabilitas lagi yang berlaku, namun sebuah kepastian.
Contoh kasus ini, jika kita bandingkan dengan uji pelemparan koin, sangatlah berbeda kondisinya. Uji pelemparan koin adalah suatu bentuk uji coba yang bersifat independen event dan tidak didasarkan atas suatu kepastian. Dari pembahasan ini saya berharap Anda sudah mendapatkan gambaran yang jelas tentang probabilitas.

Multi Threading dan Multiplexing

Dalam ilmu komputer , sebuah thread eksekusi adalah urutan terkecil instruksi diprogram yang dapat dikelola secara independen oleh sistem operasi scheduler . Sebuah thread adalah proses ringan . Pelaksanaan benang dan proses berbeda dari satu sistem operasi yang lain, tetapi dalam banyak kasus, thread yang terkandung di dalam proses. Beberapa benang bisa ada dalam proses yang sama dan berbagi sumber daya seperti memori , sedangkan berbeda proses tidak berbagi sumber daya tersebut. Secara khusus, benang-benang proses berbagi petunjuk yang terakhir (kode) dan konteksnya (nilai-nilai yang variabel yang referensi pada saat tertentu).
Pada prosesor tunggal, multithreading umumnya terjadi oleh time-division multiplexing (seperti dalam multitasking ): dengan prosesor switch antara benang yang berbeda. Ini switching konteks umumnya terjadi cukup sering bahwa pengguna merasakan benang atau tugas sebagai berjalan pada waktu yang sama. Pada multiprosesor atau multi-core sistem, benang dapat benar-benar bersamaan, dengan setiap prosesor atau inti mengeksekusi thread terpisah secara bersamaan.
Banyak sistem operasi modern langsung mendukung baik waktu-iris dan multiprosesor threading dengan scheduler proses. The kernel dari sistem operasi memungkinkan programmer untuk memanipulasi benang melalui system call interface. Beberapa implementasi yang disebut kernel thread, sedangkan proses ringan (LWP) adalah jenis spesifik kernel thread yang berbagi negara dan informasi yang sama.
Program dapat memiliki benang user-space ketika threading dengan timer, sinyal, atau metode lain untuk menghentikan eksekusi mereka sendiri, melakukan semacam ad-hoc waktu mengiris .

Thread berbeda dari tradisional multitasking proses sistem operasi dalam hal:
proses biasanya independen, sedangkan benang ada sebagai subset dari sebuah proses
proses membawa jauh lebih negara informasi dari benang, sedangkan beberapa thread dalam proses berbagi proses negara serta memori dan lainnya sumber daya
proses memiliki terpisah ruang alamat , sedangkan benang berbagi ruang alamat mereka
proses berinteraksi hanya melalui disediakan sistem komunikasi antar-proses mekanisme
konteks beralih antara benang dalam proses yang sama biasanya lebih cepat daripada konteks beralih antara proses.

Multithreading

Multi-threading adalah pemrograman meluas dan eksekusi model yang memungkinkan beberapa thread untuk tetap eksis dalam konteks sebuah proses tunggal. Benang ini berbagi sumber daya proses, tetapi mampu melakukan secara mandiri. Model threaded menyediakan pengembang dengan abstraksi yang berguna eksekusi konkuren. Namun, mungkin aplikasi yang paling menarik dari teknologi ini bila diterapkan pada proses tunggal untuk memungkinkan eksekusi paralel pada sistem multiprocessing.
Ini keuntungan dari program multithreaded memungkinkan untuk beroperasi lebih cepat pada sistem komputer yang memiliki beberapa CPU , CPU dengan beberapa core, atau melintasi sekelompok mesin - karena benang dari program alami meminjamkan diri untuk benar-benar bersamaan eksekusi . Dalam kasus seperti itu, programmer perlu berhati-hati untuk menghindari kondisi ras , dan perilaku non-intuitif lainnya. Agar data yang akan dimanipulasi dengan benar, benang akan sering perlu untuk pertemuan dalam waktu untuk memproses data dalam urutan yang benar. Thread mungkin juga memerlukan saling eksklusif operasi (sering diimplementasikan menggunakan Semaphore ) untuk mencegah data umum dari yang bersamaan dimodifikasi, atau membaca sementara dalam proses modifikasi. Penggunaan ceroboh primitif tersebut dapat menyebabkan deadlock .
Penggunaan lain multithreading, berlaku bahkan untuk sistem single-CPU, adalah kemampuan untuk sebuah aplikasi untuk tetap responsif terhadap masukan. Dalam program single-threaded, jika blok utama benang eksekusi pada tugas lama berjalan, seluruh aplikasi dapat muncul untuk membekukan. Dengan memindahkan tugas berjalan lama tersebut kepada pekerja thread yang berjalan bersamaan dengan eksekusi thread utama, adalah mungkin untuk aplikasi tetap responsif terhadap input pengguna ketika menjalankan tugas di latar belakang. Di sisi lain, dalam banyak kasus multithreading bukan satu-satunya cara untuk menjaga program responsif, dengan non-blocking I / O dan / atau sinyal Unix yang tersedia untuk mendapatkan hasil yang sama. [1]
Sistem operasi menjadwalkan thread di salah satu dari dua cara:
Preemptive multitasking umumnya dianggap pendekatan unggul, karena memungkinkan sistem operasi untuk menentukan kapan beralih konteks harus terjadi. Kerugian untuk multithreading preemptive adalah bahwa sistem dapat membuat context switch pada waktu yang tepat, menyebabkan kunci konvoi , prioritas inversi atau efek negatif lainnya yang dapat dihindari dengan multithreading koperasi.
Multithreading Koperasi, di sisi lain, bergantung pada benang sendiri untuk melepaskan kontrol setelah mereka berada pada titik berhenti. Hal ini dapat menciptakan masalah jika thread sedang menunggu sumber daya untuk menjadi tersedia.
Sampai akhir 1990-an, CPU dalam komputer desktop tidak memiliki banyak dukungan untuk multithreading, meskipun benang masih digunakan pada komputer tersebut karena beralih antara benang itu umumnya masih lebih cepat daripada proses penuh konteks switch . Prosesor di embedded system , yang memiliki persyaratan yang lebih tinggi untuk real-time perilaku, mungkin mendukung multithreading dengan mengurangi waktu benang-switch, mungkin dengan mengalokasikan dedicated register file untuk setiap thread bukan menyimpan / mengembalikan register file umum. Pada akhir 1990-an, ide melaksanakan instruksi dari beberapa thread secara simultan, yang dikenal sebagai multithreading simultan , telah mencapai desktop dengan Intel 's Pentium 4 prosesor, di bawah nama hiper threading . Telah turun dari Intel Core dan Core 2 arsitektur, tetapi kemudian kembali instated di Core I3 , Core i5 dan i7 arsitektur.

Proses, kernel thread, thread pengguna, dan serat

Artikel utama: Proses (komputasi) dan Serat (ilmu komputer)
Sebuah proses adalah "terberat" unit penjadwalan kernel. Proses sudah memiliki sumber daya yang dialokasikan oleh sistem operasi. Sumber daya termasuk memori, menangani file , soket, perangkat menangani, dan jendela. Proses tidak berbagi ruang alamat atau file sumber daya kecuali melalui metode eksplisit seperti mewarisi menangani file atau segmen memori bersama, atau pemetaan file yang sama dengan cara berbagi. Proses biasanya preemptively multitasked.
Suatu kernel thread adalah "ringan" unit penjadwalan kernel. Setidaknya satu thread kernel ada dalam setiap proses. Jika beberapa thread kernel bisa ada dalam proses, maka mereka berbagi memori yang sama dan sumber daya berkas. Kernel thread yang preemptively multitasked jika sistem operasi proses scheduler adalah preemptive. Kernel thread tidak sumber daya sendiri kecuali tumpukan , salinan register termasuk program counter , dan penyimpanan thread-lokal (jika ada). Kernel dapat menetapkan satu thread untuk masing-masing inti logis dalam sistem (karena setiap prosesor membagi dirinya menjadi beberapa logical core jika mendukung multithreading, atau hanya mendukung satu inti logis per core fisik jika tidak mendukung multithreading), dan dapat menukar benang yang bisa diblokir. Namun, benang kernel memakan waktu lebih lama daripada benang pengguna untuk ditukarkan.
Thread kadang-kadang diimplementasikan dalam userspace perpustakaan, sehingga disebut benang pengguna. Kernel tidak menyadari dari mereka, sehingga mereka dikelola dan dijadwalkan di userspace . Beberapa basis implementasi thread pengguna mereka di atas beberapa thread kernel untuk mendapatkan keuntungan dari multi-prosesor mesin ( M: Model N ). Dalam artikel ini istilah "benang" (tanpa kernel atau petunjuk kualifikasi) defaultnya mengacu pada kernel thread. Benang pengguna seperti yang diterapkan oleh mesin virtual juga disebut benang hijau . Benang Pengguna umumnya cepat untuk membuat dan mengelola, tetapi tidak dapat memanfaatkan multithreading atau multiprocessing dan mendapatkan diblokir jika semua yang terkait thread kernel mereka mendapatkan diblokir bahkan jika ada beberapa thread pengguna yang siap dijalankan.
Serat adalah unit bahkan lebih ringan dari penjadwalan yang kooperatif dijadwalkan : serat berjalan secara eksplisit harus "menyerah" untuk memungkinkan serat lain untuk menjalankan, yang membuat pelaksanaannya jauh lebih mudah daripada kernel atau petunjuk benang. Sebuah serat dapat dijadwalkan untuk berjalan di thread apapun dalam proses yang sama. Hal ini memungkinkan aplikasi untuk mendapatkan peningkatan kinerja dengan mengelola penjadwalan sendiri, bukan mengandalkan pada scheduler kernel (yang mungkin tidak disetel untuk aplikasi). Lingkungan pemrograman paralel seperti OpenMP biasanya menerapkan tugas mereka melalui serat. Terkait erat dengan serat yang coroutines , dengan perbedaan adalah bahwa coroutines adalah membangun bahasa tingkat, sementara serat adalah sistem tingkat membangun.

Thread dan serat isu

Concurrency dan struktur data

Thread dalam proses yang sama berbagi ruang alamat yang sama. Hal ini memungkinkan bersamaan menjalankan kode untuk pasangan erat dan nyaman pertukaran data tanpa overhead atau kompleksitas dari IPC . Bila dibagi antara benang, bagaimanapun, struktur data sederhana bahkan menjadi rentan terhadap bahaya ras jika mereka membutuhkan lebih dari satu instruksi CPU untuk memperbarui: dua benang mungkin berakhir mencoba untuk memperbarui struktur data pada waktu yang sama dan merasa tiba-tiba berubah di bawah kaki. Bugs yang disebabkan oleh bahaya ras bisa sangat sulit untuk mereproduksi dan mengisolasi.
Untuk mencegah hal ini, threading API menawarkan sinkronisasi primitif seperti mutexes untuk mengunci struktur data terhadap akses konkuren. Pada sistem prosesor tunggal, benang berlari ke mutex terkunci harus tidur dan karenanya memicu context switch. Pada sistem multi-prosesor, benang mungkin bukan polling mutex dalam spinlock . Kedua mungkin kinerja getah dan kekuatan prosesor di SMP sistem untuk bersaing untuk bus memori, terutama jika granularity penguncian baik-baik saja.

I / O dan penjadwalan

Benang atau serat pengguna implementasi biasanya sepenuhnya dalam userspace . Akibatnya, konteks beralih antara benang pengguna atau serat dalam proses yang sama ini sangat efisien karena tidak memerlukan interaksi dengan kernel sama sekali: context switch dapat dilakukan dengan lokal menyimpan CPU register yang digunakan oleh thread pengguna yang sedang dijalankan atau serat dan kemudian memuat register yang dibutuhkan oleh thread pengguna atau serat akan dieksekusi. Sejak penjadwalan terjadi di userspace, kebijakan penjadwalan dapat lebih mudah disesuaikan dengan kebutuhan beban kerja program.
Namun, penggunaan sistem memblokir panggilan di thread user (sebagai lawan kernel thread) atau serat dapat menjadi masalah. Jika thread pengguna atau serat melakukan panggilan sistem yang blok, benang pengguna lain dan serat dalam proses tidak dapat berjalan sampai kembali system call. Sebuah contoh khas dari masalah ini adalah ketika melakukan I / O: sebagian besar program yang ditulis untuk melakukan I / O serempak. Ketika operasi I / O dimulai, panggilan sistem dibuat, dan tidak kembali sampai operasi I / O telah selesai. Pada periode intervensi, seluruh proses "diblokir" oleh kernel dan tidak dapat dijalankan, yang kelaparan thread pengguna lain dan serat dalam proses yang sama dari mengeksekusi.
Sebuah solusi umum untuk masalah ini adalah menyediakan I / O API yang mengimplementasikan antarmuka sinkron dengan menggunakan non-blocking I / O internal, dan penjadwalan lain benang pengguna atau serat sementara operasi I / O sedang berlangsung. Solusi serupa dapat disediakan untuk panggilan memblokir sistem lainnya. Atau, program dapat ditulis untuk menghindari penggunaan sinkron I / O atau panggilan memblokir sistem lainnya.
SunOS 4.x diimplementasikan " proses ringan "atau LWPs. NetBSD 2.x +, dan DragonFly BSD menerapkan LWPs sebagai thread kernel (Model 1:1). SunOS 5.2 melalui SunOS 5.8 serta NetBSD NetBSD 2 sampai 4 menerapkan model tingkat dua, multiplexing satu atau lebih benang level pengguna pada setiap thread kernel (M: Model N). SunOS 5.9 dan kemudian, serta NetBSD 5 dieliminasi pengguna dukungan benang, kembali ke model 1:1. [1] FreeBSD 5 diimplementasikan M: Model N. FreeBSD 6 mendukung kedua 1:1 dan M: N, pengguna bisa memilih mana yang harus digunakan dengan program yang diberikan dengan menggunakan / etc / libmap.conf. Dimulai dengan FreeBSD 7, 1:1 menjadi default. FreeBSD 8 tidak lagi mendukung M: Model N.
Penggunaan benang kernel menyederhanakan kode pengguna dengan memindahkan beberapa aspek yang paling kompleks threading ke dalam kernel. Program ini tidak perlu menjadwalkan benang atau eksplisit menghasilkan prosesor. Kode pengguna dapat ditulis dalam gaya prosedural akrab, termasuk panggilan untuk memblokir API, tanpa kelaparan benang lain. Namun, kernel threading mungkin memaksa konteks beralih antara benang setiap saat, dan dengan demikian mengekspos bahaya ras dan concurrency bug yang dinyatakan akan berbohong laten. Pada sistem SMP, ini lebih diperparah karena kernel thread dapat harfiah mengeksekusi secara bersamaan pada prosesor yang terpisah.

Model

01:01 (Kernel-level threading)
Thread yang dibuat oleh pengguna dalam korespondensi 1-1 dengan entitas schedulable di kernel. Ini adalah sederhana kemungkinan pelaksanaan threading. Win32 menggunakan pendekatan ini dari awal. Pada Linux , yang C library yang biasa menerapkan pendekatan ini (melalui NPTL atau lebih LinuxThreads ). Pendekatan yang sama digunakan oleh Solaris , NetBSD dan FreeBSD .
[ sunting ]N: 1 (User-level threading)
Sebuah N: 1 Model menyiratkan bahwa semua benang level aplikasi peta ke level kernel dijadwalkan entitas tunggal, kernel tidak memiliki pengetahuan tentang benang aplikasi. Dengan pendekatan ini, switching konteks dapat dilakukan dengan sangat cepat dan, di samping itu dapat diimplementasikan bahkan pada kernel sederhana yang tidak mendukung threading. Salah satu kelemahan utama bagaimanapun adalah bahwa ia tidak bisa mendapatkan keuntungan dari akselerasi hardware pada multi-threaded prosesor atau multi-prosesor komputer: tidak pernah lebih dari satu thread yang dijadwalkan pada waktu yang sama. Misalnya: Jika salah satu benang perlu mengeksekusi permintaan I / O, seluruh proses akan diblokir dan keuntungan threading tidak dapat dimanfaatkan. The GNU Portabel Thread menggunakan User-level threading, seperti halnya Thread Negara .

M: N (Hybrid threading)

M: N peta beberapa nomor M benang aplikasi ke beberapa nomor N entitas kernel, atau "prosesor virtual." Ini adalah kompromi antara kernel-level ("01:01") dan user-level ("N: 1") threading. Secara umum, "M: N" sistem threading lebih kompleks untuk diterapkan daripada baik kernel atau benang pengguna, karena perubahan baik kernel dan kode user-space yang diperlukan. Dalam M: N pelaksanaan, perpustakaan threading bertanggung jawab untuk penjadwalan thread pengguna pada entitas schedulable tersedia, ini membuat konteks switching benang yang sangat cepat, karena menghindari panggilan sistem. Namun, ini meningkatkan kompleksitas dan kemungkinan inversi prioritas , serta penjadwalan suboptimal tanpa ekstensif (dan mahal) koordinasi antara scheduler userland dan scheduler kernel.

contoh implementasi Hybrid

Scheduler aktivasi yang digunakan oleh NetBSD asli POSIX thread implementasi perpustakaan (sebuah M: Model N sebagai lawan kernel 1:1 atau model implementasi userspace)
Marcel dari PM2 proyek.
OS untuk Tera / Cray MTA
Microsoft Windows 7

contoh implementasi Fiber

Serat dapat dilaksanakan tanpa dukungan sistem operasi, meskipun beberapa sistem operasi atau perpustakaan memberikan dukungan eksplisit untuk mereka.
Win32 API memasok serat [3] (Windows NT 3.51 SP3 dan kemudian)
Ruby sebagai benang Hijau
Netscape Portabel Runtime (termasuk implementasi serat user-space)

Pemrograman dukungan bahasa

Banyak bahasa pemrograman mendukung threading dalam beberapa kapasitas. Banyak implementasi dari C dan C + + memberikan dukungan untuk threading sendiri, tetapi juga memberikan akses ke threading API asli yang disediakan oleh sistem operasi. Beberapa tingkat yang lebih tinggi (dan biasanya lintas platform) bahasa pemrograman seperti Java, Python, dan NET., Mengekspos threading untuk pengembang sedangkan abstrak perbedaan spesifik platform dalam implementasi threading di runtime untuk pengembang. Sejumlah bahasa pemrograman lain juga mencoba abstrak konsep concurrency dan threading dari pengembang sama sekali ( Cilk , OpenMP , MPI ). Beberapa bahasa yang dirancang untuk paralelisme (Ateji PX, CUDA ).
Beberapa bahasa pemrograman ditafsirkan seperti Ruby dan (pelaksanaan CPython dari) Python dukungan threading, tetapi memiliki keterbatasan yang dikenal sebagai Juru Kunci global (GIL). GIL merupakan kunci saling pengecualian diselenggarakan oleh interpreter yang dapat mencegah penafsir dari bersamaan menafsirkan aplikasi kode pada dua atau lebih benang pada saat yang sama, yang secara efektif membatasi concurrency pada beberapa sistem inti (sebagian besar untuk benang prosesor-terikat, dan tidak banyak untuk yang network-bound).
Pemrograman event-driven bahasa deskripsi hardware seperti Verilog memiliki model threading berbeda yang mendukung sangat besar jumlah benang (untuk modeling hardware).

pengertian RMI

Remote Method Invocation (RMI)
adalah sebuah teknik pemanggilan method remote yang lebih secara umum lebih baik daripada RPC. RMI menggunakan paradigma pemrograman berorientasi obyek (Object Oriented Programming). RMI memungkinkan kita untuk mengirim obyek sebagai parameter dari remote method. Dengan dibolehkannya program Java memanggil method pada remote obyek, RMI membuat pengguna dapat mengembangkan aplikasi Java yang terdistribusi pada jaringan.

Aplikasi RMI sering kali terdiri dari dua program terpisah yaitu server dan client. Aplikasi server semacam ini biasanya membuat beberapa objek remote, menyediakan referensi terhadap objek-objek tersebut sehingga dapat diakses, serta menunggu client menginvoke/memanggil method dari objek-objek remote tersebut. Aplikasi client mendapatkan referensi remote ke satu atau lebih objek remote di server dan menjalankan method dari objek tersebut.

RMI menyediakan mekanisme dimana server dan client berkomunikasi danmemberikan informasi secara timbal balik. Aplikasi semacam ini seringkali disebut aplikasi objek terdistribusi.

Aplikasi objek terdistribusi seringkali melakukan hal berikut:
• Melokasikan objek remote
Aplikasi dapat menggunakan satu dari dua mekanisme untuk mendapatkan referensi ke objek remote. Aplikasi dapat mendaftarkan objek remote dengan fasilitas penamaan RMI (naming facility)yaitu rmiregistry atau aplikasi dapat mem-pass dan mengembalikan referensi objek remote sebagai bagian dari operasi normal.
• Berkomunikasi dengan objek remote
Detail dari komunikasi antara objek remote ditangani oleh RMI, bagi programmer komunikasi remote tampak seperti invokasi method Java standar.
• Memanggil (load) bytecode untuk objek yang di-pass
Karena RMI mengizinkan pemanggil (caller) untuk mem-pass objek ke objek remote, RMI menyediakan mekanisme yang diperlukan objek me-load kode objek, sebagaimana juga mentransmisikan datanya.

Ilustrasi berikut menggambarkan aplikasi RMI terdistribusi yang menggunakan registry untuk mendapatkan referensi ke objek remote. Server memanggil registry untuk mengasosiasikan (mengikat) suatu nama dengan objek remote. Client mencari objek remote dengan namanya pada registry server dan meng-invoke method dari objek.

Ilustrasi ini juga menunjukkan sistem RMI menggunakan Web server untuk memanggil class bytecodes, dari server ke client dan dari client ke server, untuk objek-objek yang diperlukan.



Langkah-Langkah Pembuatan Program dengan RMI
Dalam RMI, semua informasi tentang satu pelayanan server disediakan dalam suatu definisi remote interface. Dengan melihat pada definisi interface, seorang pemrogram dapat memberitahukan method apa yang dapat dikerjakan oleh server, meliputi data apa yang diterima dan data apa yang akan dikirim sebagai tanggapan.
Definisi yang ada pada remote interface menentukan karakteristik methods yang disediakan server yang dapat dilihat oleh client. Client programmer harus dapat mengetahui methods apa yang disediakan server dan bagaimana memanggilnya langsung dengan melihat ke remote interface. Client mendapatkan referensi ke remote object melalui RMI registry.

Membangun suatu aplikasi terdistribusi menggunakan RMI meliputi 6 langkah. Keenam langkah tersebut adalah:
1. Mendefinisikan remote interface
2. Implementasi remote interface dan server
3. Pengembangan client (atau applet) yang menggunakan remote interface
4. Mengkompilasi source files dan mem-buat stub and skeletons
5. Memulai (start) RMI registry
6. Menjalankan server dan client

 Model RMI – Remote Interface

● Remote interface – mendefinisikan method apa saja yang dapat diakses oleh client
● Pada contoh gambar slide 8, objek B dan F harus memiliki remote interface
● Contoh :
– CORBA menggunakan IDL untuk definisi Interface objek server
– RMI menggunakan interface Java untuk definisi objek server

Protokol Request/Reply untuk RMI


Masalah Perancangan untuk RMI
● Semantik Pemanggilan RMI
– doOperation() dapat diterapkan dalam beberapa cara untukmenyediakan jaminan pengiriman yang berbeda
● Retry request message : pengiriman ulang requestwalaupun reply diterima atau server diasumsikan gagal
● Duplicate filtering : apakah dilakukan filtering terhadaprequest yang sama atau tidak
– Ketika semua request yang dikirim ulang diterima server, ada dua kemungkinan yang dilakukan objek server
● Retransmission of result : apakah mampu menyimpan (caching) hasil reply, sehingga jika memang perlu melakukan
retransmisi ulang tidak perlu melakukan eksekusi kembali
● Repeated execution prosedur
– Dari dua kemungkinan-kemungkinan dua operasi tersebut, memunculkan beberapa semantik invocation.

Implementasi RMI


Remote Reference Module
– Translasi antara lokal dan remote objek reference menggunakan remote object table
● Berisi data semua remote object dan proxy yang dipelihara oleh server
● Digunakan ketika marshaling dan unmarshaling remote object reference

RMI Sublayer terdiri dari
– Proxy (di client), tempat penyimpan lokal untuk remote objek
– Dispatcher (di server), menerima request dan menggunakan methodID untuk memilih message di skeleton
– Skeleton (di server), menerapkan method dalam remote interface
● Argumen-argument unmarshaling
● Memanggil method yang sesuai pada remote objek
● Menunggu selesainya pemanggilan
● Melakukan marshaling hasil

Keuntungan RMI
•  Salahsatu keuntungan RMI adalah kemampuan untuk download bytecodes (code) dari suatu object’s class, jika class tsb tidak terdefinisikan di VM-nya penerima.
•  Type-type dan metode-metode object (class), yang terletak dalam satu VM, dapat dikirim ke VM yang lain, yang mungkin saja remote.
•  Sifat-sifat object yang terkirim ini tidak berubah sama sekali

Kelemahan RMI
proses pembukaan socket yang kadang-kadang tidak dapat diimplementasikan lewat jaringan internet, tapi hal ini bisa diatasi dengan menggunakan Spring HttpInvoker, sama persis dengan RMI tapi lewat protokol HTTP.

JARINGAN PEER TO PERR

Membangun Jaringan Peer to Peer


Jaringan komputer Peer to Peer (PC to PC) adalah jaringan komputer yang hanya menghubungkan dua komputer dimana kedua komputer bisa menjadi server maupun client, jadi tidak ada perbedaan antara client dan server. Dalam pemasangan Jaringan Peer to Peer anda tidak perlu memakai hub karena dalam tipe jaringan dua komputer (PC to PC) ini dapat langsung dihubungkan dengan 1 kabel UTP.
Pada jaringan tipe ini, setiap komputer yang terhubung dalam jaringan dapat saling berkomunikasi dengan komputer lainnya secara langsung tanpa perantara. Bukan hanya komunikasi langsung tetapi juga sumber daya komputer dapat digunakan oleh komputer lainnya tanpa ada pengendali dan pembagian hak akses.
Setiap komputer dalam jaringan Peer to Peer mampu berdiri sendiri sekalipun komputer yang tidak bekerja atau beroperasi. Masing-masing Komputer tidak terikat dan tidak tergantung pada komputer lainnya. Komputer yang digunakan pun bisa beragam dan tidak harus setara, karena fungsi komputer dan keamanannya diatur dan dikelola sendiri oleh masing-masing komputer.
Tipe jaringan ini cocok digunakan untuk membangun jaringan komputer skala kecil seperti di rumah, di dalam sebuah ruangan kerja, lab komputer sekolah dan lain-lain. Peer to Peer ini umumnya dipakai dalam membangun jaringan berbasis workgroup yang menerapkan fungsi sharing atau bagi pakai penggunaan hardware dan software, karena pada tipe ini biasanya tidak memerlukan pengaturan keamanan dan kendali antara masing-masing komputer.



Beberapa hal dari jaringan Peer to Peer ini adalah :
• tidak perlu spesifikasi yang setara untuk setiap komputer (bisa beragam)
• biasanya tidak ada komputer pusat yang dijadikan sentral jaringan
• biasanya juga tidak ada kontrol atau kendali terhadap pengaturan keamanan jaringan
• tidak memerlukan Operating System khusus seperti untuk server
• jika ada 1 atau lebih komputer yang rusak atau tidak bekerja, komputer lain tetap dapat berfungsi normal
Sebagai catatan untuk membuat jaringan komputer peer to peer kabel UTP yang dibuat harus dengan Crossover / Crossline karena jika menggunakan Straight Through kabel LAN dianggap tidak terkoneksi (a network cable is unplugged) kecuali jika Ethernet atau LAN Card yang anda gunakan sudah support dengan straight through.


Untuk membuat kabel jaringan Crossover / Crossline sebagai berikut :
Siapkan alat-alat yang dibutuhkan :

a. Kabel UTP
b. Konektor RJ-45
c. Crimping Tool
d. LAN Tester

Perlu anda ketahui bahwa kabel UTP memiliki 4 pasang kabel kecil di dalamnya yang memiliki warna berbeda. 4 pasang kabel itu adalah :
Pasangan 1 : Putih/Biru dan Biru,
Pasangan 2 : Putih/Oranye dan Orange,
Pasangan 3 : Putih/Hijau dan Hijau,
Pasangan 4 : Putih/Coklat dan Coklat
Proses pembuatan :


Urutan pemasangan : Salah satu sisi kabel dibuat sesuai dengan standar “Straight Through”, sedangkan sisi kabel lainnya, dilakukan “Cross-Over”, yaitu :
Pin 1 : Putih/Hijau
Pin 2 : Hijau
Pin 3 : Putih/Oranye
Pin 4 : Biru
Pin 5 : Putih/Biru
Pin 6 : Oranye
Pin 7 : Putih/Coklat
Pin 8 : Coklat
Harap diingat bahwa yang dibuat crossover hanya salah satu sisi kabel saja.
Langkah-langkah pemasangan kabel UTP pada konektor RJ45 :
1. Kupas jaket dari kabel UTP dengan menggunakan crimping tool atau alat pengupas kabel khusus.

2. Pisahkan empat lilitan kabel UTP menjadi delapan bagian, setelah itu luruskan tiap-tiap kabel agar dapat mudah dipotong.
3. Susunlah urutan warna sesuai dengan konfigurasi crossover dan sesuaikan ujung kabel yang akan dipotong dengan konektor yang akan dipasang.
4. Gunakan tang pemotong atau crimping tools, potonglah ujung kabel secara rata agar kabel mudah dimasukan ke lubang konektor.
5. Masukkan ujung kabel yang telah dipotong ke lubang konektor RJ-45 secara bersamaan, kemudian jepit konektor dengan menggunakan crimping tool agar konektor terkunci.

6. Lakukan tes dengan LAN Tester, jika semua lampu indikator menyala berarti semua bagian kabel sudah terpasang dengan benar.
Setelah pembuatan kabel crossover selesai silahkan hubungkan ke kedua komputer, lalu setting masing-masing IP komputer dengan cara :
Buka network connection (dari windows explorer klik kanan My Network Places -> Properties).
Klik kanan Local Area Connection, lalu pilih Properties -> Double klik Internet Protocol (TCP/IP).
IP Address komputer 1 : 192.168.0.11 – Subnet Mask 255.255.255.0
IP Address komputer 2 : 192.168.0.22 – Subnet Mask 255.255.255.0


Anda dapat melakukan ping terhadap komputer 2 melalui komputer 1 di DOS lewat Start -> Run -> ketik cmd -> lalu ketik ping 192.168.0.22
Jika komputer 2 ingin melakukan ping komputer 1 caranya sama tinggal ganti dengan IP address komputer 1.
Ping ini fungsinya untuk mengetahui berhasil tidaknya transfer data dari jaringan peer to peer yang telah kita buat tadi.
Selain ping komputer 1 bisa membuka komputer 2 secara langsung di address bar windows explorer dengan mengetikan \\192.168.0.22 begitupun sebaliknya.
Nah proses Membuat Jaringan Peer to Peer (PC to PC) selesai sampai di sini.


Keuntungan dan Kelemahan Jaringan Peer to Peer:
Bila ditinjau dari peran server di kedua tipe jaringan tersebut,maka server di jaringan tipe peer to peer diistilahkan nondedicated server,karena server tidak berperan sebagai server murni melainkan sekaligus dapat berperan sebagai workstation.


KEUNGGULAN:
* Antar komputer dalam jaringan dapat saling berbagi-pakai fasilitas yang dimilikinya seperti : harddisk,drive,fax/modem,printer.
* Biaya operasional relatif lebih murah dibanding dengan tipe jaringan client-server,salah satunya karena tidak memerlukan adanya server yang memiliki kemampuan khusus untuk mengorganisasikan dan menyediakan fasilitas jaringan.
* Kelangsungan kerja jaringan tidak tergantung pada satu server, Sehingga bila salah satu komputer mati atau rusak,jaringan secara keseluruhan tidak akan mengalami gangguan.


KELEMAHAN:
* Troubleshooting jaringan relatif lebih sulit,karena pada jaringan tipe ini setiap komputer dimungkinkan untuk terlibat dalam komunikasi yang ada.Di jaringan client-server komunikasi adalah antara server dengan workstation.
* Unjuk kerja lebih rendah dibandingkan dengan jaringan client-server,karena setiap komputer /peer disamping harus mengelola pemakaian fasilitas jaringan juga harus mengelola pekerjaan atau aplikasi sendiri.
* Sistem keamanan jaringan ditentukan oleh masing-masing user dengan mengatur keamanan masing-masing fasilitas yang dimiliki.
* Karena data jaringan tersebar dimasing-masing komputer dalam jaringan,maka backup harus dilakukan oleh masing-masing komputer tersebut.

sumber:

Mengenal socket pada sistem client server

Mengenal Socket

Bayangkan sebuah server game online yang berkomunikasi tanpa henti, dimainkan oleh entah berapa banyak client yang tersebar. Ini merupakan salah satu contoh aplikasi dari sekian banyak aplikasi yang menggunakan socket jaringan untuk saling berkomunikasi dan bertukar data.

Komunikasi socket jaringan memang tidak mengenal lelah, pertukaran data terjadi terus-menerus dan memegang peranan vital. Jika oleh karena suatu hal komunikasi berhenti karena maintenance, kerusakan, ataupun sebab lainnya, maka dapat dipastikan para penggunanya akan kecewa.

Maka dari itu, komunikasi jaringan selalu diusahakan tidak terhenti. Demikianlah tugas berat yang harus dilakukan socket jaringan. Sebelum membahas lebih jauh, apakah sebenarnya pengertian socket itu?

Pengertian socket adalah interface pada jaringan yang menjadi titik komunikasi antarmesin pada Internet Protocol, dan tentunya tanpa komunikasi ini, tidak akan ada pertukaran data dan informasi jaringan.

Socket terdiri dari elemen-elemen utama sebagai berikut:

1. Protokol.

2. Local IP.

3. Local Port.

4. Remote IP.

5. Remote Port.

Dalam komunikasi antara dua pihak, tentunya harus digunakan kesepakatan aturan dan format yang sama agar komunikasi dapat dimengerti. Seperti halnya dua orang yang menggunakan bahasa yang sama, maka bahasa di sini berfungsi sebagai protokol. Protokol yang digunakan dalam socket dapat menggunakan TCP ataupun UDP.

Contoh komunikasi sederhana adalah komunikasi antara komputer A dan komputer B. Baik komputer A maupun komputer B harus memiliki identitas unik, yang direpresentasikan oleh IP masing-masing.

Komunikasi yang terjadi melalui port, sehingga baik komputer A maupun komputer B harus memiliki port yang dapat diakses satu sama lain.

TCP dan UDP

Pemrograman socket adalah cara untuk menggunakan komponen/API (Application Programming Interface) socket untuk membuat sebuah aplikasi.

Aplikasi socket umumnya terdiri dari dua kategori berdasarkan pengiriman datanya, yaitu:

1. Datagram socket (menggunakan UDP).

2. Stream socket (menggunakan TCP).

Terdapat perlakuan yang berbeda antara UDP dan TCP, walaupun sama-sama berfungsi sebagai protokol pertukaran data.

UDP tidak memerlukan proses koneksi terlebih dahulu untuk dapat mengirimkan data, paket-paket data yang dikirimkan UDP bisa jadi melalui rute yang berbeda-beda, sehingga hasil yang diterima bisa jadi tidak berurutan.

Contohnya jika aplikasi socket pengirim mengirimkan berturut-turut pesan 1, pesan 2, dan pesan 3, maka aplikasi socket penerima belum tentu mendapatkan pesan yang berurutan dimulai dari pesan 1, pesan 2, dan terakhir pesan 3. Bisa saja pesan 2 terlebih dulu diterima, menyusul pesan-pesan yang lain, atau berbagai kemungkinan lainnya. Bahkan, dapat terjadi pesan yang dikirimkan tidak sampai ke penerima karena kegagalan pengiriman paket data.

Tidak demikian halnya dengan stream socket yang menggunakan TCP. Jenis ini mengharuskan terjadinya koneksi terlebih dahulu, kemudian mengirimkan paket-paket data secara berurutan, penerima juga dijamin akan menerima data dengan urutan yang benar, dimulai dari data pertama yang dikirimkan hingga data terakhir. TCP dapat menangani data yang hilang, rusak, terpecah, ataupun terduplikasi.

Dari sekilas perbedaan ini, kita dapat menarik kesimpulan bahwa aplikasi socket yang menggunakan TCP memerlukan pertukaran data dua arah yang valid. Sedangkan, aplikasi socket yang menggunakan UDP lebih memprioritaskan pada pengumpulan data.

Karena itu aplikasi socket dengan TCP sering diterapkan untuk aplikasi chat, transfer file, ataupun transaksi-transaksi penting. Sedangkan aplikasi socket dengan UDP cocok diterapkan untuk aplikasi monitoring jaringan, game online, dan aplikasi-aplikasi broadcast.

Port

Salah satu elemen penting yang digunakan dalam aplikasi socket adalah port. Port merupakan sebuah koneksi data virtual yang digunakan aplikasi untuk bertukar data secara langsung.

Terdapat banyak port di dalam sebuah sistem komputer dengan fungsinya masing-masing. Sebagai contoh, dalam mengirim e-mail digunakan service SMTP yang umumnya menggunakan port 25. Sementara service POP3 untuk menerima e-mail menggunakan port 110, port 80 digunakan untuk HTTP, port 443 digunakan untuk HTTPS, dan seterusnya.

Nomor-nomor port dikategorikan dalam tiga jenis sebagai berikut:

1. Well-known ports.

Merupakan port yang telah digunakan secara internal oleh sistem Windows, misalnya port untuk koneksi Internet, service FTP, dan seterusnya. Port yang telah digunakan ini adalah port 0 sampai dengan port 1023.

2. Registered ports.

Port ini dapat digunakan dalam aplikasi Anda, range-nya adalah port 1024 hingga port 49151, cukup banyak port yang tersedia yang bebas Anda pilih sehingga Anda tidak perlu kuatir kekurangan port untuk aplikasi Anda.

3. Dynamic/Private ports.

Dari port 49152 sampai dengan port 65535.

Winsock

Untuk pemrograman aplikasi socket berbasis Windows, maka komponen API yang sering digunakan adalah Winsock (Win-dows Socket API) yang mendukung interface standar TCP/IP, yang merupakan protokol jaringan paling popular saat ini (contoh protokol jaringan yang lain adalah NetBIOS, IPX dari Novell, AppleTalk dari Apple, dan seterusnya).

Pengertian TCP/IP (TCP over IP) mungkin dapat menjadi sedikit rancu jika diartikan TCP/IP hanya mengizinkan pengiriman TCP (dan tidak UDP), padahal seperti yang telah kita bahas, pengiriman socket dapat melalui TCP maupun UDP.

Pengertian TCP/IP di sini sebenarnya digunakan untuk menunjukkan teknologi jaringan/Internet, termasuk di dalamnya adalah UDP. Jika Anda menggunakan UDP, dapat juga disebut sebagai UDP/IP (UDP over IP), tetapi umumnya istilah ini jarang digunakan dan istilah TCP/IP telah mencakup, baik TCP maupun UDP.

Pada bahasa pemrograman visual seperti Visual Basic/Delphi, Anda dapat menggunakan control Winsock yang telah disediakan untuk mengembangkan aplikasi socket.

Walaupun kita akan mencontohkan aplikasi socket dalam environment Windows, Anda tidak perlu khawatir jika aplikasi socket yang menggunakan Winsock tidak dapat berkomunikasi dengan aplikasi socket berbasis Unix/Linux, karena komunikasi tetap dapat terjadi selama aplikasi tersebut menggunakan protokol jaringan yang sama.

Kalau demikian, untuk mencoba aplikasi socket, apakah mutlak diperlukan setidaknya jaringan dengan minimal dua komputer yang saling terkoneksi? Bagi Anda yang terpaksa hanya menggunakan satu komputer, dapat memanfaatkan alamat localhost atau 127.0.0.1 yang mengizinkan dua aplikasi berjalan pada satu mesin komputer dan berkomunikasi satu sama lain.

Aplikasi Server

Untuk membuat aplikasi socket yang sederhana, tidak diperlukan langkah-langkah yang rumit. Kita akan mencoba membuat dua buah aplikasi, yang pertama adalah aplikasi server yang akan menerima data, sedangkan aplikasi kedua adalah aplikasi client yang mengirimkan data pada server. Baik aplikasi server dan aplikasi client mendefi nisikan port yang sama sebagai jalur komunikasi.

Contoh program dibuat dengan menggunakan Visual Basic 6. Konsep pemrograman yang serupa juga dapat Anda implementasikan pada bahasa pemrograman lain seperti Visual Basic.NET, Delphi, dan lain sebagainya.

Kita akan memulainya dengan aplikasi server, tugas aplikasi server cukup sederhana, yaitu hanya siap sedia menerima data yang masuk pada sebuah port. Control yang Anda perlukan adalah control winsock bernama Winsock1 dan sebuah textbox bernama Text1. Pada event Form_Load, tuliskan kode program di bawah

ini:

Private Sub Form_Load()

With Winsock1

.LocalPort = 1025

.Listen

End With

End Sub

Kode program tersebut melakukan inisialisasi socket, socket memilih port 1025 pada komputer server dan menunggu data yang masuk melalui port tersebut dengan perintah Listen.

Selanjutnya pada event Winsock1_ConnectionRequest, ketikkan kode program berikut:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As

Long)

If Winsock1.State <> sckClosed Then Winsock1.Close

Winsock1.Accept requestID

End Sub

Kode program di atas berfungsi untuk menerima request koneksi. Selanjutnya pada event Winsock1_DataArrival, ketikkan kode program berikut:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

Winsock1.GetData strData

Text1.Text = Text1.Text & strData

End Sub

Kode program di atas berfungsi untuk mengambil data yang diterima oleh socket dan menampilkannya pada Text1. Aplikasi server telah selesai!

Aplikasi Client

Seperti aplikasi server, Anda perlu menyiapkan control Winsock dan Text, ditambah sebuah control Command Button yang dapat Anda namakan cmdKirim yang berfungsi untuk mengirimkan data yang diketik pada Text1 ke aplikasi server.

Pada event Form_Load, ketikkan kode program di bawah:

Private Sub Form_Load()

With Winsock1

.RemoteHost = “127.0.0.1”

.RemotePort = 1025

.Connect

End With

End Sub

Kode program di atas berfungsi untuk melakukan inisialisasi, tentukan IP tujuan/server/remote dengan 127.0.0.1 seperti pada contoh jika Anda mencoba aplikasi ini dengan menggunakan satu mesin komputer.

Jika Anda mencobanya dengan menggunakan dua komputer dalam sebuah jaringan, isikan dengan IP komputer yang berfungsi sebagai server.

Selanjutnya pada cmdKirim, ketikkan kode program sebagai berikut:

Private Sub cmdKirim_Click()

If Winsock1.State = sckConnected Then

Winsock1.SendData Text1.Text

End If

End Sub

Kode program di atas akan mengirimkan pesan yang Anda ketik pada textbox Text1 pada aplikasi server.

Selesailah sudah aplikasi server dan client. Cukup mudah, bukan? Anda dapat melakukan uji coba dengan menjalankan aplikasi server pada komputer yang berfungsi sebagai server (ataupun komputer yang sama dengan aplikasi client jika Anda menggunakan 127.0.0.1 sebagai remote IP).

Jalankan aplikasi client, dan ketik kata-kata yang Anda inginkan, lalu tekan Command Button cmdKirim, maka aplikasi server akan menampilkan pesan yang Anda ketikkan

tersebut.

Dari program sederhana ini, Anda dapat mengembangkannya menjadi aplikasi socket yang sesuai dengan keperluan Anda, penggunaannya sangat luas dan bisa jadi sangat bermanfaat, misalnya aplikasi instant messenger seperti Yahoo! Messenger ataupun MSN Messenger yang merupakan aplikasi socket yang banyak digunakan.

Pengolahan Data

Komunikasi data antara server dan client di atas merupakan bentuk komunikasi satu arah sederhana. Data yang dikirimkan dari client pun merupakan data mentah yang tidak memerlukan pengolahan data lebih lanjut.

Anda dapat membuat sendiri function dan rutin untuk mengolah data yang dikirim dan diterima sesuai dengan kebutuhan aplikasi, karena data yang dikirimkan antarmesin bisa jadi sangat bervariasi.

Misalnya saja aplikasi server/client Anda memerlukan pertukaran data identitas mesin, tanggal, jam, header pesan, isi pesan, dan lain sebagainya. Anda dapat mengirimkannya dalam format tertentu, misalnya bentuk string dengan karakter pemisah untuk membedakan masing-masing field.

Dalam komunikasi data di dalam jaringan, Anda perlu mempertimbangkan besarnya data yang lalu-lalang pada jaringan, baik dengan menggunakan TCP maupun UDP. Keduanya harusdipersiapkan untuk mampu menangani data yang besar jika memang pengguna aplikasi socket Anda sangat luas.

Pastinya tidak terdapat masalah yang berarti jika Anda mencobanya dengan dua atau beberapa komputer dalam sebuah jaringan lokal, tetapi coba bayangkan seberapa besar total data yang harus dikirim dan diterima pada sebuah aplikasi game online, misalnya.

Pada contoh game online, sebuah server harus dipersiapkan untuk mampu melayani sedemikian banyak client, dan jaringan yang digunakan bukan lagi jaringan lokal, tetapi sudah merupakan jaringan Internet, di mana siapapun dapat menggunakan aplikasi Anda selama ia memiliki koneksi Internet.

Mungkin Anda bertanya, jika data yang keluar-masuk memerlukan pengolahan lebih lanjut, mengapa tidak digunakan database, sehingga Anda tidak perlu pusing membuat rutin atau modul untuk mengolah data yang dikirim/diterima melalui komunikasi socket?

Pada umumnya, aplikasi socket client/server memang menggunakan database pada sisi server, tetapi jika aplikasi socket mengharuskan sisi client menggunakan database tertentu, maka akan membatasi penggunaan aplikasi itu sendiri.

Selain itu, kegunaan komunikasi socket adalah agar dapat berjalan lintas platform. Tidak peduli operating system apa yang digunakan pengguna aplikasi, komunikasi socket tetap berjalan selama digunakan protokol yang sama.