1. Pengantar TCP/IP
Keluarga TCP/IP Protocol adalah protokol yang digunakan oleh Internet dan juga dapat digunakan dalam jaringan pribadi independen.
Keluarga protokol TCP/IP mencakup protokol IP, protokol TCP dan protokol UDP.
Protokol IP menggunakan alamat IP untuk mendistribusikan paket, tetapi ini adalah layanan upaya terbaik, dan paket mungkin hilang, rusak, atau diulang. Protokol TCP dan UDP menambahkan nomor port ke protokol IP, sehingga menetapkan koneksi transparan antara aplikasi kedua host.
Perbedaannya adalah bahwa protokol TCP memperbaiki kesalahan lapisan IP, yang membuat koneksi antara host melalui pesan jabat tangan.
Kemudian, kesalahan dalam pesan dipulihkan dengan menambahkan nomor seri ke pesan. UDP hanya memperluas protokol IP.
Memungkinkannya bekerja di antara aplikasi, bukan di antara host.
Mengenai alamat IP, host dapat memiliki beberapa antarmuka jaringan, dan satu antarmuka dapat memiliki banyak alamat.
Beberapa alamat IP memiliki kegunaan khusus:
A. Alamat loopback: 127.0.0.1, selalu ditugaskan ke antarmuka loopback, terutama digunakan untuk pengujian.
B. Alamat pribadi: Dimulai dengan 10, 192.168, 172. (16-31), digunakan untuk jaringan pribadi. Ketika perangkat NAT meneruskan pesan, ia memetakan pasangan port alamat pribadi dari pesan dalam satu antarmuka ke pasangan port alamat publik di antarmuka lain. Ini memungkinkan sekelompok kecil host untuk berbagi pasangan alamat IP.
C. Alamat multicast: Angka pertama adalah antara 224 dan 239.
2. Dasar -dasar soket
1. Mendapatkan alamat
public static void main (string [] args) {try {enumeration <n networkInterface> antarmuka = networkInterface.getNetWorkInterfaces (); while (interfaces.hasmoreElements ()) {networkInterface iface = interfaces.nextElement (); System.out.println ("Antarmuka:" + iface.getName ()); Enumeration <InetAddress> addrlist = iface.getInetAddresses (); if (! addrlist.hasmoreElements ()) system.out.println ("No Address"); while (addrlist.hasmoreElements ()) {inetaddress address = addrlist.nextElement (); System.out.println ("Alamat:" + Alamat.GetHostAddress ()); }}} catch (SocketException e) {E.PrintStackTrace (); }}2. Program Instance TCP
Perlu dicatat bahwa meskipun hanya satu metode penulisan () yang digunakan untuk mengirim string di sisi klien, sisi server juga dapat menerima informasi ini dari beberapa blok. Bahkan jika string umpan balik disimpan dalam blok saat server kembali, itu mungkin TCP
Protokol dibagi menjadi beberapa bagian.
Tcpechoclienttest.java
public static void main (string [] args) melempar ioException {string server = args [0]; byte [] data = args [1] .getBytes (); int port = 7; Soket soket = soket baru (server, port); System.out.println ("Terhubung ke Server ..."); InputStream in = socket.getInputStream (); OutputStream out = socket.getoutputStream (); out.write (data); int totalbytesrcvd = 0; int bytesrcvd; while (TotalByTesRCVD <Data.Length) {if ((bytesrcvd = in.read (data, totalByTesRCVD, data.length - TotalByTesRCVD)) == -1) Lempar SocketException baru ("Koneksi Tertutup"); TotalByTesRCVD += BYTESRCVD; } System.out.println ("Diterima:" + string baru (data)); socket.close (); }TcpechoServertest.java
private static final int bufsize = 32; public static void main (string [] args) melempar ioException {serversocket serversocket = New ServerSocket (7); int recvmsgsize; byte [] recreepBuf = byte baru [bufsize]; while (true) {socket socket = serversocket.accept (); System.out.println ("Menangani Klien" + "dari jarak jauh" + socket.getRemotesocketAddress () + "di lokal" + socket.getLocalSocketAddress ()); InputStream in = socket.getInputStream (); OutputStream out = socket.getoutputStream (); while ((recvmsgsize = in.read (recequbuf))! = -1) {out.write (receptBuf, 0, recvmsgsize); } socket.close (); }}Perhatikan bahwa soket baru menentukan nomor port yang didengarkan server jarak jauh tanpa menentukan port lokal, sehingga alamat default dan nomor port yang tersedia akan digunakan. Pada port klien mesin saya adalah 4593, terhubung ke port 7 dari server.
3. Program instance UDP
Mengapa Menggunakan Protokol UDP? Jika aplikasi hanya menukar sejumlah kecil data, fase pembentukan koneksi TCP akan mengirimkan setidaknya dua kali informasinya (dan dua kali waktu perjalanan pulang pergi).
Udpechoclienttest.java
public static void main (string [] args) melempar ioException {inetaddress serverAddress = inetaddress.getByName (args [0]); byte [] bytestoSend = args [1] .getBytes (); Socket datagramsocket = datagramsocket baru (); socket.setsoTimeout (3000); Datagrampacket sendPacket = datagrampacket baru (bytestoSend, bytestoSend.length, serveraddress, 7); Datagrampacket recestPacket = datagrampacket baru (byte baru [bytestoSend.length], bytestoSend.length); // Paket mungkin hilang, jadi kita harus terus mencoba mencoba = 0; boolean menerima respons = false; do {socket.send (sendPacket); coba {socket.receive (recequentPacket); if (! RecregnPacket.getAddress (). Equals (ServerAddress)) Lempar ioException baru ("Terima dari Sumber Tidak Diketahui"); ReceptResponse = true; } catch (ioException e) {tries ++; System.out.println ("Timeout, coba lagi"); }} while (! ReceptResponse && mencoba <5); if (recest response) system.out.println ("Diterima:" + string baru (recequentPacket.getData ())); else system.out.println ("No Response"); socket.close (); } UdpechoServertest.java
private static final int echomax = 255; public static void main (string [] args) melempar ioException {datagramsocket socket = datagramsocket baru (7); Packet datagrampacket = datagrampacket baru (byte baru [echomax], echomax); while (true) {socket.receive (packet); System.out.println ("Menangani Klien di" + Packet.GetAddress ()); socket.send (paket); packet.setlength (echomax); }}Membandingkan contoh ini dengan instance TCP sebelumnya, ada perbedaan berikut:
A.datagramSocket tidak perlu menentukan alamat tujuan saat dibuat, karena UDP tidak perlu membuat koneksi, dan setiap paket data dapat dikirim atau diterima dari alamat tujuan yang berbeda.
B. Jika Anda memblokir dan menunggu di baca () seperti TCP, itu mungkin diblokir di sana selamanya, karena protokol UDP hanya memperluas protokol IP, dan paket UDP mungkin hilang. Oleh karena itu, Anda harus mengatur waktu batas waktu untuk memblokir menunggu.
C.udp Protocol menyimpan informasi batas pesan, dan setiap panggilan menerima () hanya dapat menerima data yang dikirim dengan panggilan metode Send () sekali.
D. Data maksimum yang dapat dikirim oleh paket UDP adalah 65507 byte. Kelebihan byte akan secara otomatis dibuang, dan tidak ada permintaan untuk program penerima. Oleh karena itu, aman untuk mengatur array cache menjadi sekitar 65.000 byte.
E. Jika metode penerimaan () berulang kali dipanggil dengan instance datagrampacket yang sama, panjang internal pesan harus secara eksplisit diatur ulang ke panjang aktual cache sebelum setiap panggilan.