Model aplikasi jaringan terutama meliputi:
www (World Wide Web) adalah sistem penelusuran informasi berdasarkan model klien/server, berdasarkan bahasa HTML dan protokol HTTP, dan dapat menyediakan berbagai layanan Internet. Informasi jaringan ditempatkan di lokasi berbeda pada host, dan server www menggunakan tautan hypertext untuk menghubungkan berbagai informasi. Klien www (browser) bertanggung jawab untuk menjalin kontak dengan server, mengirimkan permintaan ke server, memproses hypermedia HTML, menyediakan antarmuka pengguna grafis (GUI), menampilkan informasi, dll.
Dalam mode kerja klien/server, di sisi server, bersiaplah untuk menerima komunikasi dari beberapa komputer klien. Untuk tujuan ini, selain menggunakan alamat IP untuk mengidentifikasi komputer di Internet, nomor port juga diperkenalkan untuk mengidentifikasi thread yang melayani layanan latar belakang di sisi server. Kombinasi nomor port dan alamat IP disebut soket jaringan.
Dalam implementasi mode C/S dalam bahasa Java, soket dibagi menjadi dua kategori:
Mesin Server menyediakan layanan untuk mesin Klien melalui port (alamat bus I/O); mesin Server menyediakan beberapa layanan berbeda secara bersamaan pada beberapa port berbeda. Klien mengakses port tertentu dari Server dan meminta Server untuk melayaninya melalui port ini. Peraturan: Nomor port 0~1023 ditujukan untuk penggunaan eksklusif sistem. Misalnya protokol HTTP ada di port 80 dan protokol telnet ada di port 23. Port 1024~65535 digunakan oleh aplikasi.
Ketika program Klien dan program Server perlu berkomunikasi, kelas Socket dapat digunakan untuk membuat koneksi soket. Bayangkan koneksi soket sebagai panggilan telepon: awalnya program Klien membuat panggilan, dan program Server mendengarkan setelah panggilan selesai, salah satu pihak dapat berbicara kapan saja.
Ada dua cara opsional untuk mencapai komunikasi antara kedua pihak: soket streaming dan soket datagram:
Soket streaming membuat saluran komunikasi antara program Klien dan program Server. Setiap soket dapat melakukan operasi baca dan tulis. Untuk kedua belah pihak, proses sesi komunikasi dengan pihak lain adalah:
Buat koneksi soket, dapatkan aliran input/output, baca/tulis data, dan tutup soket (hancurkan koneksi) setelah komunikasi selesai.
Dengan menggunakan konstruktor soket, objek soket dapat dibuat di sisi klien ke server:
Socket (String host, int port): host adalah alamat IP server, port adalah nomor port, ini sudah disepakati sebelumnya.
Misalnya kode:
coba{ Socket mySocket = Socket baru(“http://www.weixueyuan.net” ,1860);
Kemudian, gunakan metode getInputStream() untuk mendapatkan aliran masukan, gunakan aliran masukan ini untuk membaca informasi yang dimasukkan oleh server ke dalam "baris"; gunakan metode getOutputStream() untuk mendapatkan aliran keluaran, dan gunakan aliran keluaran ini untuk tulis informasi ke "baris".
Dengan menggunakan konstruktor ServerSocket, Anda dapat membuat objek soket server di server yang menerima soket klien:
ServerSocket(int port): Tentukan nomor port dan buat objek ServerSocket. Nomor port port harus sama dengan nomor port yang dipanggil oleh pelanggan. Untuk melakukannya, gunakan bentuk kode berikut:
coba{ ServerSocket serverSocket = ServerSocket baru(1860); }tangkap(IOException e){}
Program sisi server mendengarkan pada port yang ditentukan. Saat menerima permintaan layanan dari program Klien, program tersebut membuat objek soket untuk berkomunikasi dengan program Klien yang sesuai dengan port tersebut. Misalnya, setelah menjalankan kode di atas untuk membuat objek soket server dan membuat objek serverSocket, ia dapat menggunakan metode terima() untuk mendapatkan objek Socket dan menerima informasi dari program klien dari soket mySocket. Seperti yang ditunjukkan pada kode berikut:
try{ Socket sc = serverSocket.accept();//ac adalah objek Socket}catch(IOException e){}
Untuk mencabut layanan, Anda dapat menutup objek Socket sc:
sc.dekat();
[Contoh] Aplikasi klien dalam mode C/S. Ini adalah contoh sederhana komunikasi Socket streaming sisi klien. Kode ini menggambarkan cara menulis program sisi klien. Dalam contoh ini, program Klien membuat permintaan ke port 4441 dari host server. Setelah koneksi dibuat, ia menyelesaikan pembacaan dan penulisan ke server.
impor java.io.*;impor java.net.*;Klien kelas publik{ public static void main(String args[]){ String s = null;Socket mySocket; DataInputStream in = null;DataOutputStream out = null; = Socket baru("localhost",4441); masuk = DataInputStream baru(mySocket.getInputStream()); DataOutputStream(mySocket.getOutputStream()); out.writeUTF("server bagus!"); while(true){ s = in.readUTF(); ); } mySocket.close(); }catch(IOException e){ System.out.println(“tidak dapat terhubung”);
[Contoh] Aplikasi sisi server yang sesuai dengan aplikasi sisi Klien. Program mendengarkan pada port 4441. Ketika permintaan klien terdeteksi, string yang berisi "Pelanggan, halo, saya server" dihasilkan dan dikeluarkan ke klien.
impor java.io.*;impor java.net.*;Server kelas publik{ public static void main(String args[]){ ServerSocket server = null; Soket Anda = null;String s = null; di = null; coba{ server = new ServerSocket(4441); +e1); } coba{ Anda = server.accept(); di = new DataInputStream(Anda.getInputStream()); keluar = new DataOutputStream(Anda.getOutputStream()); ); if(s!=null) break; } out.writeUTF("Halo pelanggan, saya servernya"); out.close(); e){System.out.println(“KESALAHAN:”+e);} }}
Untuk memberikan permainan penuh pada kemampuan kerja paralel komputer, pekerjaan sambungan soket dapat diselesaikan dengan satu utas. Ketika klien meminta server untuk menyediakan layanan, atau ketika server menerima permintaan layanan pelanggan, ia memulai thread yang didedikasikan untuk menyelesaikan komunikasi informasi, membuat aliran input dan output di thread ini, dan menyelesaikan pertukaran informasi antara klien dan klien. server.
[Contoh] Applet klien yang menempatkan koneksi soket berfungsi pada thread. Antarmukanya memiliki tombol kirim pesan, kotak teks, dan area teks. Aplikasi klien pertama-tama membuat koneksi soket dengan server. Gunakan aliran input data untuk berulang kali membaca informasi yang dimasukkan ke dalam baris oleh server, dan menampilkan informasi yang diterima di area teks. Jika informasi yang diambil adalah "akhir", koneksi soket ditutup dan program berakhir. Pengguna juga dapat memasukkan informasi dalam kotak teks dan menekan tombol kirim informasi, dan program klien menggunakan aliran keluaran data untuk mengirim konten dalam kotak teks ke server.
import java.net.*;import java.io.*;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.applet.*;public class Aclient memperluas implementasi Applet Dapat dijalankan, ActionListener{ Tombol JButton; JTextField textF; JTextArea textA; Soket utas; DataOutputStream keluar; public void init(){ setBackground(Warna baru(120.153.137)); setLayout(new BorderLayout()); Tombol = new JButton("Kirim informasi"); 20,30); setUkuran(450,350); JPanel p = JPanel baru(); p.tambahkan(teksF); p.tambahkan(tombol); tambahkan(teksA,"Tengah"); tambahkan(p,"Selatan"); tombol.tambahkanActionListener(ini); Socket baru(ini.getCodeBase().getHost(),4441); di = new DataInputStream(socket.getInputStream()); DataOutputStream(socket.getOutputStream()); }catch(IOException e){} if(thread==null){ thread = thread baru(thread.setPriority(Thread.MIN_PRIORITY); public void run(){ String s = null; while(benar){ coba{ s = in.readUTF(); if(s.equals("End")){ coba{ socket.close();break; }catch(IOException e){} }else texA.append(s + "/n"); ActionEvent e){ if(e.getSource()==button){ String s = textF.getText(); if(s! = null){ coba{ out.writeUTF(s); }catch(IOException e1){} } else{ coba{ out.writeUTF("Tolong bicara" } catch(IOException e1){} } } }}
[Contoh] Program ini menggunakan terminal 4441 untuk membuat koneksi soket dengan klien. Setelah server menerima permintaan klien, ia membuat thread dengan soket klien dan memulainya. Jika tidak ada aplikasi pelanggan, terus pantau aplikasi pelanggan. Utas menetapkan aliran data masukan dan aliran data keluaran sesuai dengan soket klien. Thread ini digunakan untuk membaca informasi yang dimasukkan pelanggan ke dalam baris. Jika informasi yang diterima adalah "End", server menjawab "End" dan kemudian menutup koneksi soket; jika tidak maka akan menjawab: "Saya adalah server yang Anda katakan kepada saya", dan informasi diterima oleh server.
import java.net.*;import java.io.*;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.applet.*;public class Aclient memperluas implementasi Applet Dapat dijalankan, ActionListener{ Tombol JButton; JTextField textF; JTextArea textA; Soket utas; DataOutputStream keluar; public void init(){ setBackground(Warna baru(120.153.137)); setLayout(new BorderLayout()); Tombol = new JButton("Kirim informasi"); 20,30); setUkuran(450,350); JPanel p = JPanel baru(); p.tambahkan(teksF); p.tambahkan(tombol); tambahkan(teksA,"Tengah"); tambahkan(p,"Selatan"); tombol.tambahkanActionListener(ini); Socket baru(ini.getCodeBase().getHost(),4441); di = new DataInputStream(socket.getInputStream()); DataOutputStream(socket.getOutputStream()); }catch(IOException e){} if(thread==null){ thread = thread baru(thread.setPriority(Thread.MIN_PRIORITY); public void run(){ String s = null; while(benar){ coba{ s = in.readUTF(); if(s.equals("End")){ coba{ socket.close();break; }catch(IOException e){} }else texA.append(s + "/n"); ActionEvent e){ if(e.getSource()==button){ String s = textF.getText(); if(s! = null){ coba{ out.writeUTF(s); }catch(IOException e1){} } else{ coba{ out.writeUTF("Tolong bicara" }catch(IOException e1){} } } }}