Minggu, 10 Maret 2013

Contoh Sederhana Program Socket Client-Server

Dalam pemrograman jaringan sebenarnya dasarnya sangat sederhana. Pertama kita harus membuat method(disertai namanya) berupa socket dan server socket sebagai pintu masuk dan keluar programnya. Jadi ketika kita butuh mengirim data (misal: dari server ke client) maka kita buka dulu pintu di server lalu dikirim melalui pintu/socket tersebut ke socket client yang sudah terbuka. Setelah menggunakannya juga socket tersebut perlu ditutup agar program berjalan normal.
Ilustrasi
Apa itu socket?

Socket adalah suatu abtraksi yang mana aplikasi dapat mengirim dan menerima data seperti sama halnya dengan membuka suatu file untuk dibaca dan ditulis pada tempat penyimpanan file. Socket memungkinkan untuk masuk kedalam jaringan dan berkomunikasi dengan aplikasi lain yang juga masuk kedalam jaringan yang sama. Informasi yang ditulis kedalam socket pada suatu aplikasi pada suatu mesin dapat dibaca oleh aplikasi lain pada mesin yang berbeda dan sebaliknya.

Apa fungsi dari socket?

Fungsi utama dari socket yaitu mengatur pengiriman data pada jaringan komputer. Maksudnya yaitu memberitahukan apakah dia client atau serve,memberikan informasi data yang dikirim, memberikan informasi dimana data yang disimpan, memberikan informasi kemana data aka dikirimkan, dan lainnya.

Source Code Server #1:

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;
/* * To change this template, choose Tools | Templates * and open the template in the editor. *//** * * @author BASKARA */public class Server {    public static void main(String[] args) {    Socket s = null;    ServerSocket ss;        try {            ss = new ServerSocket(1234);            s = ss.accept(); //waiting connection                        InputStream in = s.getInputStream();            OutputStream out = s.getOutputStream();                        int dummy = 0;                        while(true)            {                dummy = in.read();                System.out.print((char)dummy);                if((char)dummy=='\n')                    break;            }                        dummy = 0;            String pesan = "Anda siapa?(1. Admin 2. User)";            String pesan1 = "Selamat datang admin!\n";            String pesan2 = "Selamat datang user!\n";            //String pesan3 = "!";                        out.write(pesan.getBytes());            out.flush();                        while(true)            {                dummy = in.read();                                if(dummy=='1')                {                    System.out.print("masuk\n");                    out.write(pesan1.getBytes());                    out.flush();                    break;                    /*dummy = (dummy - 48) + (dummy - 48);                    out.write((int)dummy);                    out.flush();*/                    //out.write(pesan3.getBytes());                    //out.write(new Integer(123).toString());                    //out.flush();                    //break;                }                else                {                    System.out.print("masuk\n");                    out.write(pesan2.getBytes());                    out.flush();                    break;                    /*dummy = (dummy - 48) + (dummy - 48);                    out.write((int)dummy);                    out.flush();*/                    //out.write(pesan3.getBytes());                    //out.write(new Integer(123).toString());                    //out.flush();                    //break;                }            }                        in.close();            out.close();            s.close();            ss.close();        } catch (IOException ex) {            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);        }}}

Source Code Client #1:



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class Client {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("127.0.0.1",1234);
            
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            String tes = "Tes koneksi\n";
            
            out.write(tes.getBytes());
            out.flush();
            
            int dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy==')')
                    break;
            }
            //System.out.print('\n');
            
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            
            tes = br.readLine();
            //System.out.print(tes.toString());
            out.write(tes.getBytes());
            out.flush();
            
            dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                //System.out.print(dummy);
                System.out.print((char)dummy);
                if((char)dummy=='!')
                    break;
            }
            
            in.close();
            out.close();
            s.close();
            
        } catch (UnknownHostException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
        
}
}


Alur program pertama di atas setelah terhubung adalah sebagai berikut:
1. Client mengirim pesan tes koneksi ke server.
2. Setelah dibaca oleh server, server akan mengirim pertanyaan apakah client merupakan admin atau user.
3. Client mengirimkan balasan ke server, jika balasan berupa "1" maka dia adalah admin, jika "2" atau selain itu maka dia adalah user.

Source Code Server#2:


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;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class Server {
    public static void main(String[] args) {
    Socket s = null;
    ServerSocket ss;
        try {
            ss = new ServerSocket(1234);
            s = ss.accept(); //waiting connection
            
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            int dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy=='\n')
                    break;
            }
            
            dummy = 0;
            String pesan = "Masukkan angka yang ingin dikalikan 2: ";
            //String pesan1 = "Selamat datang admin!\n";
            //String pesan2 = "Selamat datang user!\n";
            String pesan3 = "!";
            
            out.write(pesan.getBytes());
            out.flush();
            
            while(true)
            {
                dummy = in.read();
                
                if(dummy=='1')
                {
                    /*System.out.print("masuk\n");
                    out.write(pesan1.getBytes());
                    out.flush();
                    break;*/
                    dummy = (dummy - 48) + (dummy - 48); //kode ASCII jadi harus dikurangi 48 dahulu
                    out.write((int)dummy);
                    out.flush();
                    //out.write(pesan3.getBytes());
                    //out.write(new Integer(123).toString());
                    //out.flush();
                    break;
                }
                else
                {
                    /*System.out.print("masuk\n");
                    out.write(pesan2.getBytes());
                    out.flush();
                    break;*/
                    dummy = (dummy - 48) + (dummy - 48);
                    out.write((int)dummy);
                    out.flush();
                    //out.write(pesan3.getBytes());
                    //out.write(new Integer(123).toString());
                    //out.flush();
                    break;
                }
            }
            
            in.close();
            out.close();
            s.close();
            ss.close();
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
}
}

Source Code Client#2:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class Client {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("127.0.0.1",1234);
            
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            String tes = "Tes koneksi\n";
            
            out.write(tes.getBytes());
            out.flush();
            
            int dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy==')')
                    break;
            }
            //System.out.print('\n');
            
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            
            tes = br.readLine();
            //System.out.print(tes.toString());
            out.write(tes.getBytes());
            out.flush();
            
            dummy = 0;
            
            while(true)
            {
                dummy = in.read();
                System.out.print(dummy);
                //System.out.print((char)dummy);
                //if((char)dummy=='!')
                    break;
            }
            
            in.close();
            out.close();
            s.close();
            
        } catch (UnknownHostException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
        
}
}

Alur program kedua di atas setelah dijalankan adalah sebagai berikut:
1. Client melakukan tes koneksi ke server.
2. Server membalas, meminta input angka yang akan dilipatgandakan.
3. Client mengirim angka ke server.
4. Angka berupa ASCII dikurangi 48 supaya ketahuan angka sesungguhnya, kemudian dilipatgandakan dan dikirim kembali ke Client.

Tidak ada komentar:

Posting Komentar