- 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
Pada halaman ini ada contoh untuk koneksi soket.
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'
classComProtocol {private static final intCOM_STATUS_WAITING = 0;private static final intCOM_STATUS_READY_SENT = 1;private static final intCOM_STATUS_DATA_SENT = 2;private static final intCOM_STATUS_WAITING_FOR_TERMINALID = 3;private intnegara = COM_STATUS_WAITING; / / --- Referensi untuk 'KEMBALI -END 'mqTe modul --- swasta MqTeAccess; ... / ** * Buat objek protokol; Panggil fungsi MQ INI * /publicComProtocol () {intIRET = 0; modul / / --- Inisialisasi 'BACK-END' --- mqTe. ... ... } / ** * --- Proses Input dan Buat output ke Klien --- * /publicCOM_DATA processInput (COM_DATA theInput) {COM_DATA theOutput; / / Inisialisasi Variabel --- --- theOutput =newCOM_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 ==) {intIRET; / / --- 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 ==) {intIRET; 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;}}returntheOutput;} / / --- 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 classCOM_DATAimplementsSerializable {public StringcomData;public booleanbExit;public intIRET; / ** * --- Contants nilai dapat disahkan di dalam IRET untuk Server --- * /static final intWAIT_FOR_RESPONSE = 0;static final intNOWAIT_FOR_RESPONSE = 1; / ** * Inisialisasi struktur data * /publicCOM_DATA () { comData = ""; bExit = false; IRET = 0; } / / - Akhir dari COM_DATA () Pembuat - / ** * Menyalin itu isinya * /public voidcopy (COM_DATA tSrc) {thiscomData = tSrc.comData.;thisbExit = tSrc.bExit.;thisIRET = 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 classComClient {privateSocket comSocket;privateObjectOutputStream oOut;privateObjectInputStream Oin;private booleanIsItOpen = false; / ** * --- Socket Terbuka --- * /public voidopenCom (StringsServerName,intiPortNumber)throwsUnknownHostException, IOException {try{ / / --- Socket Terbuka untuk komunikasi --- comSocket =newSocket (sServerName, iPortNumber); / / --- Dapatkan Stream untuk menulis permintaan untuk Server --- oOut =newObjectOutputStream (comSocket.getOutputStream ()); / / --- Dapatkan Stream / / untuk membaca dari Server Oin =newObjectInputStream (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 booleanisItOpen () {returnIsItOpen; } / ** * --- Dapatkan data string dari Server --- * /public voidgetServerData (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 voidsendDataToServer (COM_DATA tServData)throwsIOException { / / --- Kirim data string --- System.out.println ("Kirim:" + tServData.comData); oOut.writeObject (tServData);return; } / ** * --- Socket Tutup --- * /public voidcloseCom ()throwsIOException { 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