- Aplikasi klien menggunakan JDBC untuk menghubungkan server basis data, (logika bisnis Limited pada back-end, kecuali menggunakan (prosedur tersimpan )
- Aplikasi klien menggunakan RMI ( Doa remote method ) untuk berkomunikasi dengan back-end.
- Aplikasi klien menggunakan koneksi soket untuk berkomunikasi dengan back-end.
- Contoh Socket Connection
Membuat Server
Bahasa Java dikembangkan memiliki jaringan komputasi dalam pikiran. Untuk alasan ini sangat mudah untuk membuat sebuah program server. Sebuah server adalah bagian dari kode yang berjalan sepanjang waktu mendengarkan pada port tertentu pada komputer untuk permintaan yang masuk. Ketika permintaan datang, itu mulai thread baru untuk melayani request. Lihat contoh berikut:
Mendengarkan pada port
- ComServer
- kelas untuk mendengarkan pada port untuk klien.
java.net.ServerSocket impor; / ** * - Kelas Server Utama; Mendengarkan pada port untuk klien; Jika ada klien, * Thread baru memulai dan kembali untuk mendengarkan lebih lanjut untuk klien. - * / masyarakat kelas ComServer { statis boolean GL_listening = true; / ** * - Program Utama untuk memulai Server - * / public void main statis (String [] args) throws IOException { ComServer srv = new ComServer (); . srv mendengarkan (); } / / --- End --- Metode Utama / ** * - Server metode; Dengarkan klien - * / public int mendengarkan () throws IOException { ServerSocket ServerSocket = null; int iPortNumber = 9090; / / --- Buka Socket Server dimana harus mendengarkan --- try { Sistem keluar println.. ("*** Buka soket mendengarkan; di:" + + iPortNumber "***"); ServerSocket = new ServerSocket (iPortNumber); } Catch (IOException e) { . Sistem err println ("Tidak dapat mendengarkan pada port:" + iPortNumber).; . Sistem exit (1); } sementara (GL_listening) { ComServerThread clientServ; / / --- Mendengarkan klien; Jika ada klien memulai Thread - Sistem keluar println.. ("*** Dengarkan Klien; di:" + + iPortNumber "***"); clientServ = baru ComServerThread (serverSocket. menerima ()); / / --- Layanan Klien --- Sistem keluar println.. ("*** Klien datang; Layanan itu ***"); . clientServ start (); / * --- Gunakan untuk multy Threaded --- * / / / ClientServ.run (); / * --- Gunakan untuk Single Threaded --- * / } / / --- Tutup soket Server; Server keluar --- . ServerSocket close (); return 0; } / / --- Akhir mendengarkan Metode --- } / / --- Akhir Kelas ComServer ---
- ServerSocket (iPortNumber)
- Membuat server socket, terikat pada port tertentu.
- serverSocket.accept ()
- Mendengarkan untuk koneksi yang akan dibuat untuk socket ini dan menerimanya. Metode blok sampai sambungan dibuat. Ia mengembalikan Socket baru.
Layanan Satu Klien
- ComServerThread
- Kelas ini diperpanjang dari Thread; Bertanggung jawab untuk layanan satu klien. Sambungan Socket akan terbuka antara klien dan server. Sebuah protokol sederhana harus didefinisikan antara klien dan server, server harus memahami apa yang diinginkan klien dari server. Klien akan mengirim 'menghentikan' perintah, yang server akan mengakhiri koneksi soket. Kelas ComServerThread bertanggung jawab untuk menangani permintaan klien, sampai client mengirimkan sebuah 'menghentikan' perintah.
/ ** * - Sebuah kelas diperpanjang dari Thread; Bertanggung jawab untuk layanan satu klien - * / kelas'''ComServerThread'''extends Thread { swasta Socket clientSocket = null; COM_DATA tDataFromClient; COM_DATA tDataToClient; ObjectInputStream Oin; ObjectOutputStream oOut; / ** * - Pembuat - * / publik ComServerThread (Socket socket) { super ("ComServerThread"); ini clientSocket = soket;. } / / - Akhir dari ComServerThread () konstruktor - / ** * - Overrun dari Thread (super) kelas - * / public {{java: void}} run () { try { / / --- Buat Writer; akan digunakan untuk mengirim data ke klien --- oOut = new ObjectOutputStream (clientSocket. getOutputStream ()); / / --- Buat Reader, akan digunakan untuk mendapatkan data dari klien --- Oin = new ObjectInputStream (clientSocket. getInputStream ()); / / --- Buat objek protokol baru --- ComProtocol comp = baru ComProtocol (); / / --- Kirim sesuatu untuk klien untuk menunjukkan server yang siap --- tDataToClient ='''comp.processInput (null);''' '''SendDataToClient'''(tDataToClient, oOut); / / --- Dapatkan data dari klien --- sementara (benar) { try { tDataFromClient ='''getDataFromClient (Oin)'''; / / --- Parse permintaan dan mendapatkan balasan --- tDataToClient ='''comp.processInput (tDataFromClient);''' / / --- Mengirim data ke Klien --- '''SendDataToClient'''(tDataToClient, oOut); } catch (EOFException e) { .. Sistem keluar println ("Klien Terputus, Bye, Bye"); break; } / / --- Lihat jika Klien ingin mengakhiri sambungan --- jika (tDataToClient. bExit) { .. Sistem keluar println ("Klien kata Bye Bye."); break; } } / / --- Sumber daya Tutup; Klien ini hilang --- . comp Akhir (); oOut close ().; . Oin close (); . clientSocket close (); } Catch (IOException e) { e. printStackTrace (); } } / / - Akhir dari run () Metode - / ** * Dapatkan data dari Klien * / COM_DATA private static'''getDataFromClient'''(ObjectInputStream Oin) throws IOException { COM_DATA tDataFromClient = null; / / Inisialisasi variabel --- --- / / TDataFromClient = baru COM_DATA (); sementara (tDataFromClient == null) { try { / / --- Baca Nomor Baris pertama - tDataFromClient = (COM_DATA) Oin readObject ().; } Catch (ClassNotFoundException e) { .. Sistem keluar println ("ClassNotFound"); } } Sistem keluar println ("Dapatkan:". + TDataFromClient comData)..; kembali tDataFromClient; } / / --- GetDataFromClient () Metode --- / ** * Mengirim data ke Klien * / private void static'''sendDataToClient'''(COM_DATA tDataToClient, ObjectOutputStream oOut) throws IOException { Sistem keluar println ("Terkirim:". + TDataToClient comData)..; oOut writeObject (tDataToClient).; kembali; } / / - Akhir dari sendDataToClient () Metode - } / / --- End kelas ComServerThread ---
- COM_DATA tDataFromClient
- Variabel ini akan berisi objek data dari klien.
- COM_DATA tDataToClient
- Variabel ini akan berisi objek data yang akan dikirim ke klien.
- sendDataToClient
- Metode ini mengirimkan objek data ke klien.
- getDataFromClient
- Metode ini mendapatkan objek data dari klien.
- processInput (tDataFromClient)
- Metode dari kelas 'ComProtocol' menafsirkan perintah klien dan mengembalikan objek data yang akan dikirim kembali ke klien.
Penanganan permintaan; mengimplementasikan protokol komunikasi
- ComProtocol
- Kelas ini mengimplementasikan, dan merangkum logika komunikasi (protokol). Protokol adalah sebagai berikut:
- Klien memulai koneksi.
- Server menerima dan mengirim pengakuan memberitahu bahwa itu siap
- Client mengirimkan permintaan
- Respon server berdasarkan permintaan
- ...
- Klien mengirimkan 'DAH' permintaan
- Server mengakui 'Bye' permintaan dan memutuskan koneksi soket
- Klien mendapat pengakuan ke 'DAH'
- ...
- Klien mengirimkan 'SHUTDOWN' permintaan
- Server mengakui 'SHUTDOWN' permintaan dan memutus dan juga berhenti mendengarkan klien lain.
- Klien mendapat pengakuan ke 'shutdown'
class
ComProtocol {private static final int
COM_STATUS_WAITING = 0;private static final int
COM_STATUS_READY_SENT = 1;private static final int
COM_STATUS_DATA_SENT = 2;private static final int
COM_STATUS_WAITING_FOR_TERMINALID = 3;private int
negara = COM_STATUS_WAITING; / / --- Referensi untuk 'KEMBALI -END 'mqTe modul --- swasta MqTeAccess; ... / ** * Buat objek protokol; Panggil fungsi MQ INI * /public
ComProtocol () {int
IRET = 0; modul / / --- Inisialisasi 'BACK-END' --- mqTe. ... ... } / ** * --- Proses Input dan Buat output ke Klien --- * /public
COM_DATA processInput (COM_DATA theInput) {COM_DATA theOutput; / / Inisialisasi Variabel --- --- theOutput =new
COM_DATA () ; / / --- Periksa apakah Klien ingin melepaskan ---if
(theInput = null!) {if
(theInput.comData.equals ("BYE @.!")) {/ / --- Klien ingin mengakhiri; Echo data kembali ke klien theOutput.comData = "BYE."; / / --- Tandai comunication yang akan diakhiri --- theOutput.bExit = true; / / --- Mengatur keadaan internal untuk menunggu baru klien --- negara = COM_STATUS_WAITING; / / --- Kembali data objek yang akan dikirim ke klien --- theOutput kembali;}if
(theInput.comData.equals (".! SHUTDOWN @")) {/ / - - Klien ingin untuk mengakhiri; Echo data kembali ke klien theOutput.comData =; / / --- Tandai comunication yang akan diakhiri --- theOutput.bExit = true; / / --- Katakan server untuk "BYE." berhenti mendengarkan untuk klien baru --- ComServer.GL_listening = false; / / --- Mengatur keadaan internal untuk menunggu sebuah negara --- klien baru COM_STATUS_WAITING =; / / --- Kembali data objek yang akan dikirim ke klien --- kembali theOutput;}}if
(negara COM_STATUS_WAITING ==) {/ / --- Kirim Pesan siap untuk Klien --- theOutput.comData = "Siap:"; / / --- Mengatur keadaan internal siap; dan menunggu TerminalId --- negara = COM_STATUS_WAITING_FOR_TERMINALID;}else if
(negara COM_STATUS_WAITING_FOR_TERMINALID ==) {int
IRET; / / --- Dapatkan ID Terminal --- sTermId = theInput.comData; / / --- 'Panggil KEMBALI -END modul '... --- MqTe. ... ... / / --- Kirim Pesan siap dengan versi Server untuk klien --- theOutput.comData = "Siap; Server Versi 1.0:"; / / --- Set raedy keadaan internal, dan menunggu TerminalId --- negara = COM_STATUS_READY_SENT;}else if
(negara COM_STATUS_READY_SENT ==) {int
IRET; String sCommand = theInput.comData; 'BACK-END' / / --- Panggil modul ... ... / * ** --- Periksa apakah kita harus mendapatkan data Respon --- * /if
(theInput.iRet == COM_DATA.NOWAIT_FOR_RESPONSE) {/ / - Mengatur Nilai output --- theOutput.iRet = IRET; theOutput. comData = "";}else
{modul / / --- Panggil 'BACK-END' --- mqTe. ... / / --- Mengatur Nilai output --- theOutput.comData = mqTe.sResponseBuffer; theOutput.iRet = IRET;}}return
theOutput;} / / --- End Metode processInput () ---} / / - - Akhir Definisi Kelas ComProtocol ---
Obyek Data yang melewati jaringan
- COM_DATA
- adalah struktur data kelas yang ditransmisikan melalui jaringan. Kelas berisi data saja.
/ ** * COM_DATA struktur data * /
public class
COM_DATAimplements
Serializable {public String
comData;public boolean
bExit;public int
IRET; / ** * --- Contants nilai dapat disahkan di dalam IRET untuk Server --- * /static final int
WAIT_FOR_RESPONSE = 0;static final int
NOWAIT_FOR_RESPONSE = 1; / ** * Inisialisasi struktur data * /public
COM_DATA () { comData = ""; bExit = false; IRET = 0; } / / - Akhir dari COM_DATA () Pembuat - / ** * Menyalin itu isinya * /public void
copy (COM_DATA tSrc) {this
comData = tSrc.comData.;this
bExit = tSrc.bExit.;this
IRET = tSrc.iRet.;return
; } } / / - Akhir dari kelas COM_DATA -Buat Klien
Sebuah kode klien untuk server / layanan biasanya merupakan sebuah aplikasi API yang digunakan untuk antarmuka pengguna ke server. Dengan bantuan API klien pengguna aplikasi tidak harus tahu bagaimana untuk menghubungkan ke server untuk mendapatkan layanan.
- ComClient
- Kelas ini adalah API klien. Aplikasi ini menggunakan kelas ini untuk berkomunikasi dengan server.
public class
ComClient {private
Socket comSocket;private
ObjectOutputStream oOut;private
ObjectInputStream Oin;private boolean
IsItOpen = false; / ** * --- Socket Terbuka --- * /public void
openCom (String
sServerName,int
iPortNumber)throws
UnknownHostException, IOException {try
{ / / --- Socket Terbuka untuk komunikasi --- comSocket =new
Socket (sServerName, iPortNumber); / / --- Dapatkan Stream untuk menulis permintaan untuk Server --- oOut =new
ObjectOutputStream (comSocket.getOutputStream ()); / / --- Dapatkan Stream / / untuk membaca dari Server Oin =new
ObjectInputStream (comSocket.getInputStream ()); / / Set variabel --- Anggota internal yang terbuka --- Komunikasi IsItOpen =true
; }catch
(java.net.UnknownHostException e) { System.out.println ("(openCom:) Tidak tahu tentang host:" + sServerName); IsItOpen =false
; melempar (e); }catch
(java.io.IOException e) { System.out.println ("(openCom:) Tidak bisa mendapatkan I / O untuk koneksi ke:" + sServerName); IsItOpen =false
;throw
(e); } } / ** * --- Periksa apakah Socket terbuka --- * /public boolean
isItOpen () {return
IsItOpen; } / ** * --- Dapatkan data string dari Server --- * /public void
getServerData (COM_DATA tServData) throws IOException { / / Inisialisasi Variabel --- --- tServData.comData = ""; / / --- Dapatkan Respon dari Server ---try
{ tServData.copy ((COM_DATA) oIn.readObject ()); }catch
(ClassNotFoundException e) { System.out.println ("Kelas Tidak Ditemukan"); } System.out.println ("Server:" + tServData.comData);if
(tServData.comData.equals ("BYE.")) { tServData.bExit =true
; }return
; } / ** * --- Mengirim data ke server --- * /public void
sendDataToServer (COM_DATA tServData)throws
IOException { / / --- Kirim data string --- System.out.println ("Kirim:" + tServData.comData); oOut.writeObject (tServData);return
; } / ** * --- Socket Tutup --- * /public void
closeCom ()throws
IOException { oOut.close (); oIn.close (); comSocket.close (); IsItOpen =false
; } }- getServerData (COM_DATA tServData)
- Metode ini membaca data dari server dan salinan nilai-nilai ke objek 'tServData'.
- sendDataToServer (COM_DATA tServData)
- Metode ini mengirimkan 'tServData' objek melalui jaringan ro server.
- oIn.readObject ()
- Metode ini mengembalikan objek data yang dikirim oleh server.
- oOut.writeObject (tServData)
- Metode ini mengirimkan objek data ke server.
Kamis, 13 Oktober 2011
Pemrograman Java / Client Server
Pada tahun 1990-an, tren itu bergerak menjauh dari komputasi Mainframe untuk Client / Server, karena harga server Unix turun. Akses database dan beberapa logika bisnis yang terpusat di back-end server, mengumpulkan data dari program pengguna telah diinstal di front-end pengguna "klien" 'komputer. Dalam dunia Java ada tiga cara utama front-end dan back-end hanya bisa berkomunikasi.
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar