Tujuan Instruksional
Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk:
- Memahami cara komunikasi obyek melalui stream.
- Memahami cara komunikasi obyek melalui socket.
1. Komunikasi Obyek
Melalui Stream Pada pemrograman socket, pada umumnya data yang dikirimkan berupa data stream. Stream memungkinkan juga untuk mengirimkan obyek melalui suatu mekanisme yang disebut serialisasi objek. Serialisasi objek (Object Serialization) adalah suatu teknik yang memungkinkan program untuk menyimpan status objek ke dalam sebuah file, kemudian dibaca kembali dari file ke memori atau dikirimkan melalui jaringan.
Staff.java
import java.io.*;
public class Staff implements Serializable{
String nama;
String divisi;
int umur;
public Staff(String nama, String divisi, int umur) {
this.nama=nama;
this.divisi=divisi;
this.umur= umur;
}
public void print() {
System.out.println("Data Staff: ");
System.out.println("Nama : " + nama);
System.out.println("Divisi : " + divisi);
System.out.println("Umur : "+ umur);
}
}
ObjectClient.java
import java.net.*;
import java.io.*;
public class ObjectClient{
private static int SRV_PORT = 5000;
private static ObjectOutputStream os=null;
public static void main(String argv[]) throws Exception{
try{
Socket soketClient= new Socket("127.0.0.1", SRV_PORT);
os= new ObjectOutputStream(soketClient.getOutputStream());
Staff pegawai= new Staff("Steve","IT",24);
os.writeObject(pegawai);
System.out.println("Client mengirim data pegawai:");
pegawai.print();
} catch(Exception e){
e.printStackTrace();
}
}
}
ObjectServer.java
import java.net.*;
import java.io.*;
public class ObjectServer {
private static int SRV_PORT=5000;
private static ObjectInputStream is=null;
public static void main(String argv[]) throws Exception{
ServerSocket soketServer= new ServerSocket(SRV_PORT);
Socket soketClient= soketServer.accept();
is= new ObjectInputStream(soketClient.getInputStream());
Staff pegawai= (Staff) is.readObject();
System.out.println("Server menerima data Pegawai");
pegawai.print();
}
}
2. Komunikasi Objek
Melalui Stream Suatu obyek dari kelas yang menerapkan interface serializable atau externalizable dapat diserialisasikan melalui socket karena ServerSocket dan Socket juga mendukung stream. Dengan demikian suatu objek dapat juga dikirimkan dan diterima melalui mekanisme socket.
PegawaiEx.java
import java.io.*;
public class PegawaiEx implements Externalizable {
private String nama;
private int umur;
private int gaji;
public PegawaiEx() {
}
public PegawaiEx(String nama, int umur, int gaji) {
this.nama = nama;
this.umur = umur;
this.gaji = gaji;
}
public void writeExternal(ObjectOutput objout) throws IOException {
objout.writeObject("Nama : " + this.nama);
objout.writeInt(this.umur);
objout.writeInt(this.gaji);
}
public void readExternal(ObjectInput objin) throws IOException, ClassNotFoundException {
this.nama = (String) objin.readObject();
this.umur = objin.readInt();
this.gaji = objin.readInt();
}
public String toString()
{
return "Data untuk " + this.nama + "\n" + this.umur + "\n" + this.gaji;
}
}
PegawaiClient.java
import java.io.*;
import java.net.*;
public class PegawaiClient {
public static void main(String[] args) {
Socket soc = null;
PegawaiEx pegawaiInput = null;
try {
soc = new Socket("localhost", 4545);
ObjectInput ois = new ObjectInputStream(soc.getInputStream());
ObjectOutput ous = new ObjectOutputStream(soc.getOutputStream());
pegawaiInput = new PegawaiEx("Client", 10,150);
ous.writeObject(pegawaiInput);
ous.flush();
String s = (String) ois.readObject();
System.out.println(s);
ous.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
PegawaiServer.java
import java.io.*;
import java.net.*;
public class PegawaiServer {
public static void main(String[] args) {
ServerSocket ser = null;
Socket soc = null;
PegawaiEx pegawaiInput = null;
try {
ser = new ServerSocket(4545);
System.out.println("Server siap");
soc = ser.accept();
ObjectInput ois = new ObjectInputStream(soc.getInputStream());
ObjectOutput ous = new ObjectOutputStream(soc.getOutputStream());
pegawaiInput = (PegawaiEx) ois.readObject();
System.out.println("Hasil Kiriman Client");
System.out.println(pegawaiInput);
String res = new String ("Data Pegawai telah diterima");
ous.writeObject(res);
ous.flush();
ous.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}