Apa itu soket
Dua program di jaringan mengimplementasikan pertukaran data melalui koneksi komunikasi dua arah. Soket biasanya digunakan untuk mencapai koneksi antara pelanggan dan pihak layanan. Socket adalah antarmuka pemrograman yang sangat populer dari protokol TCP/IP, dan soket ditentukan oleh alamat IP dan nomor port.
Namun, jenis protokol yang didukung oleh soket tidak hanya TCP/IP, jadi tidak perlu koneksi antara keduanya. Di lingkungan Java, pemrograman soket terutama mengacu pada pemrograman jaringan berdasarkan protokol TCP/IP.
Proses komunikasi soket
Apakah ujung server mendengarkan (monitor) memiliki permintaan koneksi, klien mengirimkan permintaan koneksi ke sisi server, dan server mengirimkan kembali pesan akses ke klien. Koneksi dibuat. Baik server dan klien dapat berkomunikasi dengan pihak lain melalui Metode Kirim, Tulis, dan lainnya.
Untuk soket penuh, struktur dasar berikut harus dimasukkan.
(1) membuat soket;
(2) buka input/outflow yang terhubung ke soket;
(3) membaca/menulis operasi soket sesuai dengan protokol tertentu;
(4) Matikan soket. tidak menyebabkan apapun menyebabkan pengaruh.)
Buat soket
Java menyediakan dua jenis soket dan server di java.net, yang digunakan untuk mewakili klien dan server koneksi dua arah. Ini adalah dua kelas yang sangat bagus yang sangat bagus, yang nyaman digunakan. Metode struktur adalah sebagai berikut:
Soket (port indaddress, int); LocalAddr, int localport) Soket (Alamat Inetadddress, Intaddddress Localddr, Int Localport) Server (Int Port).
Di antara mereka, alamat IP, nama host dan nomor port dari pihak lain dalam koneksi dua arah, masing -masing. Alamat host Serversocket), IMP adalah kelas induk dari soket, yang dapat digunakan untuk membuat server dan dapat digunakan untuk membuat soket. Count berarti jumlah maksimum koneksi yang dapat didukung server. Misalnya: Belajar jaringan video http://www.xxspw.com
Socket Client = Soket Baru
Perhatikan bahwa saat memilih port, Anda harus berhati -hati. Setiap port menyediakan layanan tertentu. Jumlah port 0 ~ 1023 dicadangkan oleh sistem. Pilih nomor port, yang terbaik adalah memilih satu lebih besar dari 1023. Jumlahnya adalah untuk mencegah konflik.
Jika kesalahan terjadi saat membuat soket, IOException akan dihasilkan, dan harus diproses dalam program. Oleh karena itu, membuat soket atau server harus ditangkap atau dilemparkan.
Kode
server
Socket Paket; Penerimaan (); The " +Count +" Times! "); count ++; string line = input.readline (); System.out.println (" Klien berkata: " +line); if (" line.equals ("Exit") ) {flag = false; klien {klien .close ();}} akhirnya {server.close ();}}}
klien
Socket Paket; . cin. }}}}}}
IP pengikat server
Saat menulis soket dengan C struct sockaddr_in dapat menentukan sin_addr.s_addr, yaitu, Anda dapat menentukan alamat IP.
Saya mungkin hanya ingin mengikat alamat IP dari kartu jaringan ETH0, karena LO dan WLAN0 saya mungkin menggunakan host virtual nginx dengan satu port.
rencana
Konstruktor server adalah sebagai berikut:
Public Serverersocket (int port, intaddddress bindddr) melempar ioException
parameter:
Port port -local tcp
Backlog -Shemoring to Backlog
bindaddr -untuk diikat oleh server
Karena inetaddress tidak memiliki konstruktor, saya telah kusut di sini untuk sementara waktu.
Misalnya kode
Indadress bindip = inetaddress.getbyname ("192.168.1.168"); Akses bersamaan
Server menangani banyak klien dengan menambahkan permintaan multi -utusan pada saat yang sama.
Kode server
Paket Capitalsocket; Static int clientnum = 0; ) Kapitalisasi.clientnum ++); (Socket S, int id) {this.client = s; true) {string data = input.readline (); ); ;} Catch (ioException e) {e.printstacktrace ();}}}}}}}}}}}}
Kode klien kode klien pada dasarnya tidak berubah, menambahkan operasi keluar
Paket Capitalsocket; 1.168 ", 9898); coba {printwriter output = printwriter baru (client.getOutputStream (), true); pemindai cin = pemindai baru (system.in); string words; while (cin .hasnext ()) {words = cin. NextLine (); ;} akhirnya {client.close ();}}}