life, coding, and stuff

11 March 2013

Socket Programming di Java



Kali ini akan saya tampilkan tutorial pemrograman socket menggunakan bahasa java.
Ada dua program yang berjalan di dua komputer berbeda, dan akan saling bertukar pesan “Hello World”.

Client.java
Pertama kita import header yang diperlukan

package clientsocket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

Di bawah deklarasi kelas, buatlah sebuah blok exception, lalu kita buat sebuah variabel yang akan kita gunakan untuk menyimpan string yang akan kita kirim ke Server. Dalam contoh adalah “Hello World!”

public class ClientSocket {
    public static void main(String[] args) {
        try {           
            String myrespon = "Hello World!\r\n";

Lalu buat sebuah variabel bertipe Socket. Lalu isiskan alamat ip dan port yang akan kita gunakan.           
            Socket s = new Socket("10.151.43.185", 5136);

Kemudian buat dua variabel bertipe InputStream dan OutputStream. InputStream berfungsi sebagai penerima data yang dikirimkan dari komputer lain, sedangkan OutputStream berfungsi sebagai pengirim pesan ke komputer lain.

            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream()    

Fungsi berikut akan membuat OutputStream yang telah kita buat untuk mengirimkan variabel pesan kita. OutputStream hanya menerima data bertipe bytes, jadi kita gunakan  method getBytes() untuk mengubah string menjadi bytes.

            os.write(myrespon.getBytes());
           
Selanjutnya kita buat sebuah integer yang akan digunakan sebagai penerjemah pesan dari server. Lalu buat sebuah loop yang ketika berjalan, ia akan membaca data dari InputStream dan menyimpannya dalam integer yang selanjutnya akan diubah menjadi char dan langsung ditampilkan ke layar. Jika integer yang telah diubah ke char tersebut bernilai “\n”, maka loop akan dihentikan.

            int c;    
            while(true)
            {
                c = is.read();
                System.out.print((char)c);
                if((char)c == '\n') break;
            }

Kemudian kita tutup semua Stream yang telah kita buat dan soket itu sendiri.
            os.close();
            is.close();
            s.close();

Terakhir, kita buat penutup dari exception yang telah kita buat di atas.
        } catch (UnknownHostException ex) {
            Logger.getLogger(ClientSocket.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ClientSocket.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}



Server.java

Seperti biasa, kita import terlebih dulu header yang diperlukan

package socketserver;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

Sebenarnya, program server tidak jauh beda dari client, bedanya, jika client adalah pihak yang meminta koneksi, maka server adalah pihak yang menyetujui koneksi.  Maka kita buat lagi variabel bertipe socket dan satu lagi variabel baru bertipe ServerSocket.

public class SocketServer {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("10.151.34.185",5136);
            ServerSocket ss = new ServerSocket(5136);

 Fungsi di bawah akan membuat socket yang telah kita buat untuk disetujui oleh ServerSocket yang kita buat.           
            s = ss.accept();

Seperti client, kita juga buat dua buah Stream untuk input dan output, dan pesan kita.

            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream();
            String respon = "Hello World!\r\n";

Kita juga buat sebuah loop yang akan memeriksa pesan masuk dari client

            int c;
            while(true)
            {
                c = is.read();
                System.out.print((char)c);
                if((char)c == '\n')
                    break;
            }
           
Terakhir kita kirim pesan respon server kembali ke client. Tambahkan flush untuk merefresh stream kita.

            os.write(respon.getBytes());
            os.flush();

Tutup Semua stream dan socket

            os.close();
            is.close();
            s.close();
            ss.close();
           
Dan terakhir, tutup exception yang kita buat

        } catch (IOException ex) {
            Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

0 Comments:

Post a Comment

Popular Posts