Professional Documents
Culture Documents
Pemrograman Socket
Socket
Socket adalah sebuah abstraksi perangkat lunak yang digunakan sebagai suatu "terminal" dari suatu hubungan g antara dua mesin atau proses yang saling b i berinterkoneksi. k k i End to end communication i ti
Process A
Process B
a socket
Socket types
Stream St socket k t
Paket-paket data byte, bidirectional connection Ordered, reliable delivering of packets Use TCP
Datagram socket
There is no connection.
Each packet is sent independently from the others
Raw sockets
Out of our scope
Stream vs Datagram
App
3 2 1
socket
Dest.
Datagram Stream
App
3 2 1
D1
socket
D2 D3
Operasi Socket
Socket S k t dapat d t melakukan l k k operasi: i
Koneksi ke mesin remote (connect) M Mengirim ii d data t (send) ( d) Menerima data (receive) Mentutup koneksi (close) Bind to a port (bind), khusus server
Data transfer
When the two process are connected, data flow may begin between them (in byte data)
Discard
When the communication ends, the sockets must be closed, to enable the system y to release resources, especially p y the bounded names ( (e.g. g local ports) because they cannot be reused until they are available from any possible association.
Data transfer
Heterogenity Big Endian vs Little Endian Solution:
Marshalling Unmarshalling g
Big-Endian Big Endian machine
119 40 12
128.119.40.12 128
Little-Endian machine
128 119 40
12.40.119.128 12
Marshalling / Unmarshalling
Object Serialization
Big-Endian g machine 12
119 40 12
12
Serializable
Pada pemrograman socket biasanya yang dikirim adalah d t stream data t .
Nah, bagaimana jika yang dikirim adalah suatu obyek?
Hal ini dapat dilakukan dengan menggunakan serialisasi obyek. Object Serialization adalah teknik dimana suatu program dapat menyimpan status obyek ke dalam sebuah file dan kemudian dapat dipanggil kembali dari file ke memori atau dikirim melalui jaringan.
Serialisasi S i li i memastikan tik agar obyek-obyek b k b kd dapat t sinkron i k
Jika sebuah obyek ingin diserialisasi, maka obyek itu harus mengimplementasikan g p java.io.Serializable. j Untuk menuliskan obyek yang terserialisasi ke file dibutuhkan I/O stream khusus, yaitu menggunakan ObjectOutputStream yang merupakan subclass dari FilterOutputStream.
Contoh Pegawai
Contoh SimpanPegawai
Penjelasan
B Berarti ti program Si SimpanPegawai P i akan k menyimpan 2 obyek pegawai yaitu aaa dan bbb bbb ke dalam file bernama db db . Sedangkan untuk pembacaan file yang berisi obyek juga harus dilakukan secara berurutan berurutan, yaitu aaa dulu baru bbb. Karena pembacaan dengan menggunakan readObject() yang mengembalikan Object, maka harus dilakukan casting sesuai dengan tipe Objectnya.
Contoh: BacaPegawai
Transient
D Dalam l contoh-contoh t h t h diatas, di t semua atribut t ib t d dari i kelas Pegawai secara otomatis bisa dibaca karena bersifat serializable. Kita bisa membatasi hak akses terhadap atribut tertentu saja yang bersifat serializable serializable. Hal ini dapat dilakukan dengan menggunakan keyword transient. Dengan keyword itu maka atribut tersebut tidak ikut terbawa terbawa untuk dikirimkan dalam deretan byte melalui I/O Stream.
InetAddress class
Kelas ini digunakan g untuk mengambil g informasi IP suatu komputer.
Kelas ini bersifat static dan tidak memiliki konstruktor. konstruktor
Method-methodnya adalah:
getByName(namahost) yang akan menerima sebuah string nama host dan mengembalikan alamat IP berdasarkan DNS, berupa object InetAddress.
Untuk U t k menampilkannya: ilk gunakan k method th d t toString() St i ()
getLocalHost() yang akan mengembalikan alamat IP dan nama host pada komputer lokal. getAllByName(namahost) mengembalikan array InetAddress
Contoh getByName
Class ServerSocket
Constructor C t t
ServerSocket(int port) ServerSocket(int S S k t(i t port, t int i t backlog) b kl ) ServerSocket(int port, int backlog, InetAddress bindAddr) Methods Socket accept() void close() InetAddress getInetAddress() int getLocalPort()
Class Socket
Constructor
Socket (InetAddress address, int port) Socket (String host, int port)
Methods
InputStream getInputStream() OutputStream p getOutputStream() g p () void close() InetAddress getInetAddress() int getLocalPort()
Prinsip ServerSocket
Create C t a ServerSocket S S k t object. bj t
ServerSocket servSock = new ServerSocket(1234);
InfoClient.java
InfoServer.java
Bagaimana jika client yang dilayani lebih dari satu? - MULTI THREADING
DatagramSocket g ()
Kelas ini membentuk koneksi dengan protokol UDP pada alamat IP lokal host dengan penentuan nomor portnya secara random berdasar tersedianya nomor port yang dapat digunakan.
Methods DatagramSocket
send(DatagramPacket data), akan g DatagramPacket g ke host dan mengirim port yang dituju receive(DatagramPacket data) data), akan memblok eksekusi sampai suatu paket lengkap diterima
Methods DatagramPacket
getData tD t (), () untuk t k mengambil bil i informasi f i data, kembaliannya berupa byte[] akan mempersulit kita membaca data, sehingga kita bisa mengubahnya menjadi String atau ByteArrayInputStream get getLength e gt (), untuk u tu mengambil e ga b pa panjang ja g datagram getAddress(), () untuk mengambil alamat IP getPort(), untuk mengambil alamat port
Exception
public class SocketException extends p IOException
Kelas ini merupakan kelas yang diturunkan dari kelas IOException IOException. Kelas exception ini dipanggil atau dipicu ketika ada kegagalan dalam pemakaian socket contoh: kegagalan dalam protokol TCP.
ketika port yang akan digunakan sudah digunakan sebelumnya pada host tertentu
Exception (2)
public bli class l Bi dE BindException ti extends t d SocketException
K Kelas l i ini i akan k di dipanggil il k ketika tik ada d port tl lokal k l yang akan digunakan sudah terpakai oleh yang lain, atau ada kegagalan g g dalam p permintaan untuk menggunakan alamat.
Exception (3)
public bli class l N R t T H tE NoRouteToHostException ti extends SocketException
Koneksi yang akan dibangun tidak dapat dipenuhi oleh karena melebihi waktu timeout yang tersedia di atau h host yang di dituju j tidak id k dapat dicapai (unreachable).
Datagram Sockets
SERVER: 1. Create a DatagramSocket object DatagramSocket dgramSocket = new DatagramSocket(1234); 2. Create a buffer for incoming datagrams byte[] buffer = new byte[256]; 3. Create a DatagramPacket object for the incoming datagram:
constructor t t get t 2 arguments: t the th previously-created i l t d byte b t array; the th
size of this array.
4.
Datagram Sockets
SERVER: 5 5. Accept the senders sender s address and port from the packet InetAddress clientAddress = inPacket.getAddress(); int clientPort = inPacket.getPort(); 6 6. Retrieve the data from the buffer: 3 arguments: byte array, array start byte array position, and length of byte array string message = new String(inPacket.getData(), 0, inPacket.getLength()); 7. Create the response datagram. 3 arguments: the byte array containing the response message; the size of the p ; the client's address; ; the client's port p number. response; DatagramPacket outPacket = new DatagramPacket(response.getBytes(), response.length(),clientAddress, clientPort); 5. Send the response datagram dgramSocket.send(outPacket) 6. Close the DatagramSocket: dgram.close();
InfoServerUDP
Datagram g Sockets
CLIENT: 1 Create a DatagramSocket object 1. DatagramSocket dgramSocket = new DatagramSocket(); 2. Create the outgoing datagram DatagramPacket outPacket = new DatagramPacket(message.getBytes(), message.length(),host, g g (), , p port); ); 3. Send the datagram message dgramSocket.send(outPacket) g ( ) 4. Create a buffer for incoming datagrams byte[] y [] buffer = new byte[256]; y [ ]
CLIENT: 5 Create a DatagramPacket object for the incoming 5. datagram DatagramPacket g inPacket = new DatagramPacket(buffer, buffer.length); 6 Accept 6. A t an incoming i i d datagram t dgramSocket.receive(inPacket) 7 Retrieve the data from the buffer 7. string response = new String(inPacket.getData(), g( g (), 0, , inPacket.getLength()); 8. Close the DatagramSocket: dgram.close();
Datagram Sockets
InfoClientUDP
NEXT
Distributed Object & Remote Invocation
Chapter p 5 RPC, RMI & CORBA