Friday, May 4, 2007

Pratikum appSocketServer

Berikut adalah tutorial membuat aplikasi socket server berbasis desktop application :

1. Buat project baru, File->New Project..., pilih kategori General dan project Java Application, kemudian isi nama projectnya socketServerApp, dan uncheck create main class

2. Tembahkan form baru ke dalam project, carannya klik kanan pada nama project, pilih new form, dan pilih Jframe Form..

3. Isi nama class “appSocketServer” dan nama packagenya “app.socket”

4. Akan muncul windows design, dan buat design seperti pada gambar d bawah ini :

5. Beralih ke editor source (pilih View->Editor->Source)

6. Masukkan beberapa komponen berikut ini dibawah package app.socket dalam appSocketServer.java

import java.awt.event.*;
import java.net.*; // kebutuhan socket
import java.io.*; // untuk io exception
import javax.swing.JTextArea;


7. Buat class baru ClientWorker (untuk komunikasi dengan socket) didalam appSocketServer.java dan diluar class appSocketServer()

/**
* class ClientWorker : menerima request yg datang dari client,
* mengembalikan socket object (client),
* dan merepresentasikan koneksi;
* komunikasi dengan socket (baca/tulis);
* menampilkan data (diterima dan di kirim)
*/
class ClientWorker implements Runnable {
private Socket client;
private javax.swing.JTextArea textArea;

// konstruktor
ClientWorker(Socket client, javax.swing.JTextArea textArea) {
this.client = client;
this.textArea = textArea;
}

public void run(){
String line;
BufferedReader in = null;
PrintWriter out = null;
boolean done = false;

try{
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
}catch (IOException e) {
System.out.println("input or output stream gagal");
System.exit(-1);
}

while(!done){
try{
line = in.readLine(); // baca data
if(line == null)
done=true;
else
{
// tampilkan data yang diterima ke textArea
textArea.append("Receive\t: "+line+"\n");

//kirim kembali data ke client
line = line + " juga";
out.println(line); // tulis data
// tampilkand data yang di kirim ke textarea
textArea.append("Send\t: "+line+"\n");
}
}catch (IOException e) {
System.out.println("baca gagal");
System.exit(-1);
}
}
}
}

8. Pada class appSocketServer, deklarasikan objek socket berikut (deklarasi variabel dilakukan didalam class appSocketServer dan diluar semua method yang ada di dalam class appSocketServer).

ServerSocket serverSocket = null;

9. Buat method baru untuk membuat socket object, didalam kelas appSocketServer

/**
* Methoe listenSocket : membuat koneksi socket
*/
public void listenSocket()
{
try{
// membuat onject socket pada port number :4444
serverSocket = new ServerSocket(4444);
}catch (IOException e) {
System.out.println("Could not listen on port 4444");
System.exit(-1);
}
// selama conect ke client
while(true){
ClientWorker clWorker;
try{
clWorker = new ClientWorker(serverSocket.accept(), jTextArea1);
Thread tread = new Thread(clWorker);
tread.start();
}catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
}

10. Buat satu method lagi didalam class appSocketServer untuk menghentikan tread dan juga program

protected void finalize(){
try{
serverSocket.close();
System.out.println("Close socket");
}catch (IOException e) {
System.out.println("Could not close socket");
System.exit(-1);
}
}

11. Dalam method main(), ubah code dengan code dibawah ini

public static void main(String args[]) {
appSocketServer frame = new appSocketServer();

WindowListener wListen = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};

frame.addWindowListener(wListen);
frame.pack();
frame.setVisible(true);
frame.listenSocket();
}

12. Jalankan applikasi dengan menekan tombol F6, makan akan muncul window baru, yaitu window untuk memilih main project, klik OK maka akan muncul applikasi socket server yang telah dibuat


No comments: