Artikel ini menjelaskan kode terperinci pemrograman soket java untuk mengimplementasikan layanan ucapan sederhana untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Sisi server:
Menerapkan layanan Hello paling sederhana, cetak alamat IP klien ke konsol, kirim serangkaian karakter (halo, soket java) ke klien yang terhubung dan tutup koneksi dengan klien. Tunggu permintaan koneksi klien berikutnya untuk tiba.
Klien:
Menerapkan soket paling sederhana untuk terhubung ke Hello Server, menerima data byte yang dikirim oleh server dan mencetak konten ke konsol.
Kiat utama:
Karena Java menyediakan banyak API input dan output aliran, banyak pemula yang terpapar pemrograman soket Java, dan karena mereka tidak memiliki pemahaman tentang sifat komunikasi byte jaringan, mereka secara langsung menerima aliran byte soket oleh readline (). Namun, karena pihak pengirim tidak mengirim /r /n, data tidak dapat dibaca. Ini adalah kesalahan yang paling umum. Beberapa kesalahan umum lainnya termasuk tidak menginisialisasi buffer penerimaan, menghasilkan karakter yang kacau, dan tidak disusun kembali sesuai dengan jumlah byte yang diterima dengan membaca, menghasilkan pengecualian untuk data yang diterima. Jadi kode menunjukkan apa yang dikirim oleh byte dan penerimaan oleh byte. Ini adalah konsep dan prinsip yang sangat penting dalam pemrograman jaringan. Biarkan metode input stream println () dan metode output stream readline () pergi ke neraka. Bukannya itu tidak mudah digunakan, tetapi saya sarankan Anda tidak menggunakannya karena itu akan menghalangi pemahaman dan pemahaman Anda tentang esensi pemrograman jaringan. Juga, saya ingin membuat catatan khusus: kadang -kadang flush () tidak diperlukan kecuali Anda menggunakan aliran input dan output buffered untuk membaca dan menulis byte.
Kode sisi server:
paket com.gloomyfish.socket.tutorial.two; impor java.io.dataoutputStream; impor java.io.ioException; impor java.net.serversocket; impor java.net.socket; HelloService kelas publik memperluas utas {private Serversocket Serversocket; public helloService (int port) melempar ioException {serversocket = New ServerSocket (port); } public void run () {coba {while (true) {System.out.println ("Menunggu klien di port" + serversocket.getLocalport ()); Klien soket = serversocket.accept (); // diblokir & menunggu soket pendapatan.out.println ("Just Connected To" + Client.GetRemoteSocketAddress ()); DataOutputStream dos = new DataOutputStream (client.getOutputStream ()); byte [] hello = "halo, soket java" .getbytes (); dos.write (halo, 0, hello.length); dos.close (); client.close (); }} catch (Exception e) {e.printstacktrace (); }} public static void main (string [] args) {coba {helloService service = new HelloService (9999); service.start (); } catch (ioException e) {e.printstacktrace (); }}} Server mendengarkan port 9999 dan menunggu koneksi, dan menggunakan utas Java untuk mencapai startup sisi server.
Kode klien adalah sebagai berikut:
paket com.gloomyfish.socket.tutorial.two; impor java.io.datainputstream; impor java.io.ioException; impor java.net.inetsocketaddress; impor java.net.socketaddress; impor java.net.socketaddress; kelas publik HelloClient {private int clientNumber; alamat socketaddress pribadi; public helloClient (int clientnum) {clientnum = clientnum; } public void setupClients (String ServerHostName, int port) melempar ioException {address = new iNetSocketAddress (serverHostName, port); untuk (int i = 0; i <clientNumber; i ++) {System.out.println (); System.out.println ("Mulai Klien No." + (i + 1)); Soket soket = soket baru (); socket.connect (alamat); DataInputStream buferedReader = new DataInputStream (socket.getInputStream ()); byte [] cbuff = byte baru [256]; char [] charbuff = char baru [256]; ukuran int = 0; while ((size = bufferedReader.read (cbuff))> 0) {convertbytetochar (cbuff, charbuff, size); System.out.println (charbuff); } bufferedreader.close (); socket.close (); }} private void convertByTetochar (byte [] cbuff, char [] charbuff, ukuran int) {for (int i = 0; i <charbuff.length; i ++) {if (i <size) {charbuff [i] = (char) cbuff [i]; } else {charbuff [i] = ''; }}} public static void main (string [] args) {coba {helloclient client = new HelloClient (10); client.setupclients ("localhost", 9999); } catch (ioException e) {e.printstacktrace (); }}} Mulai 10 klien untuk terhubung ke sisi server, dan setelah menerima salam server, klien menutup koneksi.
Kiat Khusus: Pastikan untuk menginisialisasi buffer charbuff
Hasil menjalankan program:
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.