Lompat ke konten Lompat ke sidebar Lompat ke footer

Tugas Praktikum Sistem Terdistribusi

Helmykediri..com

1. Buatlah sebuah program untuk ping alamat komputer lain. Inputan bisa dilakukan dengan dua cara.

a. Inputkan alamat hostnya.

b. Inputkan nama hostnya

2. Terkadang dalam suatu jaringan terdapat satu nama host dengan beberapa alamat host. Buatlah program untuk mendapatkan semua alamat host tersebut. Sebagai contoh: 

a. Nama Host : www.google.com

b. Alamat Host :

  • www.google.com/74.125.235.52
  • www.google.com/74.125.235.51
  • www.google.com/74.125.235.49
  • www.google.com/74.125.235.48
  • www.google.com/74.125.235.50

3. Buatlah program aplikasi untuk mengecek koneksi jaringan lokal atau scan ip dari ip pertama hingga akhir secara berulang-ulang, sehingga memungkinkan user dapat mengetahui PC mana yang aktif dan tidak aktif. 

Jawab:

1. Kode Program (Inputan Alamat Host)
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
 *
 * @author TOSHIBA
 */
public class inputalamat_nurul {
public static void main (String args []){
String host;
Scanner input=new Scanner (System.in);
System.out.print("Masukkan Alamat Host : ");
host=input.next();
try
{
InetAddress address=InetAddress.getByName(host);
System.out.println("Nama Host : "+ address.getHostName());
}
catch(UnknownHostException uhEx)
{
System.out.println("Host tidak ditemukan" + host);
}
}
}

Kode Program (Inputan Nama Host)
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
 *
 * @author TOSHIBA
 */
public class inputhost_nurul {
public static void main (String[] args) {
String host;
Scanner input = new Scanner(System.in);
System.out.print("Masukkan Nama Host : ");
host = input.next();
try {
// mendapatkan IP address berdasarkan nama host
InetAddress address = InetAddress.getByName(host);
// mendapatan namahost dan IP address dari localhost
System.out.println("Alamat Host : " + address.toString());
}
catch (UnknownHostException uhEx) {
System.out.println("Tidak dapat menemukan " + host);
}
}
}
2. Kode Program Satu Nama Host dengan beberapa Alamat Host
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
 *
 * @author TOSHIBA
 */
public class nomer2_nurul {
public static void main (String[] args)  {
String host;
Scanner input = new Scanner(System.in);
System.out.print("Masukkan Nama Host : ");
host = input.next();
try {
    for (int i = 0; i< 5; i++)  {
// mendapatkan IP address berdasarkan nama host
InetAddress address = InetAddress.getByName(host);
// mendapatan namahost dan IP address dari localhost
System.out.println("Alamat Host : " + address.toString());
}
}
catch (UnknownHostException uhEx) {
System.out.println("Tidak dapat menemukan " + host);
}
}
}


 3. Kode Program (mengecek koneksi jaringan lokal atau scan ip pada PC sendiri)

import java.io.*;

import java.net.*;

/**

 *

 * @author TOSHIBA

 */

public class SimpleServer_Nurul {

public final static int TESTPORT = 5000;

public static void main(String args[]) {

ServerSocket checkServer = null;

String line;

BufferedReader is = null;

DataOutputStream os = null;

Socket clientSocket = null;

try {

checkServer = new ServerSocket(TESTPORT);

System.out.println("Aplikasi Server hidup ...");

} catch (IOException e) {

System.out.println(e);

}

try {

clientSocket = checkServer.accept();

is = new BufferedReader(new

InputStreamReader(clientSocket.getInputStream()));

os = new DataOutputStream(clientSocket.getOutputStream());

} catch (Exception ei) {

ei.printStackTrace();

}

try {

line = is.readLine();

System.out.println("Terima : " + line);

if (line.compareTo("salam") == 0) {

os.writeBytes("salam juga");

} else {

os.writeBytes("Maaf, saya tidak mengerti");

}

} catch (IOException e) {

System.out.println(e);

}

 

try {

os.close();

is.close();

clientSocket.close();

} catch (IOException ic) {

ic.printStackTrace();

}

}

}


import java.io.*;
import java.net.*;

/**
 *
 * @author TOSHIBA
 */
public class simpleClient_Nurul {
public final static int REMOTE_PORT = 5000;
public static void main(String args[]) throws Exception {
Socket cl = null;
BufferedReader is = null;
DataOutputStream os = null;
BufferedReader stdin = new BufferedReader(new
InputStreamReader(System.in));
String userInput = null;
String output = null;
// Membuka koneksi ke server pada port REMOTE_PORT
try {
cl = new Socket("127.0.0.1", REMOTE_PORT);
is = new BufferedReader(new InputStreamReader(cl.getInputStream()));
os = new DataOutputStream(cl.getOutputStream());
} catch(UnknownHostException e1) {
System.out.println("Unknown Host: " + e1);
} catch (IOException e2) {
System.out.println("Erorr io: " + e2);
}
// Menulis ke server
try {
System.out.print("Masukkan kata kunci: ");
userInput = stdin.readLine();
os.writeBytes(userInput + "\n");
} catch (IOException ex) {
System.out.println("Error writing to server..." + ex);
}
// Menerima tanggapan dari server
try {
output = is.readLine();
System.out.println("Dari server: " + output);
} catch (IOException e) {
e.printStackTrace();
}
// close input stream, output stream dan koneksi
try {
is.close();
os.close();
cl.close();
} catch (IOException x) {
System.out.println("Error writing...." + x);
}
}
}

1. Apa pengertian Socket TCP?
2. Cara implementasi Client Server Socket sebutkan dan jelaskan hingga tahu akan perbedaannya?
3. Tuliskan langkah-langkah Pembuatan Socket TCP!
4. Dari contoh program client socket serta server socket, dari contoh program tersebut tolong anda uji coba jalankan dan amati dari hasil program tersebut!

Jawab:

1. Pengertian Socket TCP

Socket adalah mekanisme komunikasi untuk pertukaran data antar aplikasi yang terdapat di dalam sebuah mesin maupun beda mesin dan pertukaran ini terjadi pada sebuah jaringan 

TCP Socket : menggunakan konsep connection oriented dan reliable data transfer sehingga aplikasi yang dibangun dengan TCP Socket tidak mempedulikan lama waktu sebuah pengiriman data akan tetapi sangat mementingkan ketepatan data. Konsep connection oriented adalah suatu proses pengiriman data disertai dengan tanggung jawab sehingga ketika data sampai pada tujuan akan ada pemberitahuan atau jika terjadi kesalahan pada saat pengiriman data maka data tersebut akan dikirim kembali ke tujuannya. Konsep reliable data transfer adalah sebuah proses pengiriman data dengan menggunakan nomor urut sehingga pada saat diterima, data akan tersusun berdasarkan nomor urut tersebut.

2. A. Cara implementasi Client Socket
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

/**
 *
 * @author F3
 */
public class SimpleClient_Nurul {
     public static void main (String args [] ) throws IOException
     { //Open your connection to a server, at port 1254
         Socket s1 = new Socket ("localhost",1254); //get an input file handle from the socket and read input
         DataInputStream dis = new DataInputStream (s1.getInputStream());
         String st = new String (dis.readUTF());
         System.out.println(st); //When done, just close the connection and exit
         dis.close();
         s1.close();
     }
    
}

B. Cara implementasi Server Socket 
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 *
 * @author F3
 */
public class SimpleServer_Nurul {
    public static void main (String args [] ) throws IOException      
    { //Register service on port 1254
        ServerSocket s = new ServerSocket (1254);
        Socket s1=s.accept(); //Wait and accept a connection
        //Get a communication stream associated with socket
        DataOutputStream dos = new DataOutputStream (s1.getOutputStream());
        //Send a string!
        dos.writeUTF("Hi there");
        //Close the connection, but not the server socket
        dos.close();
        s1.close();
    }
}
C. Perbedaan keduannya :

Class SimpleClient digunakan untuk merequest data ke Class SimpleSever,  Class SimpleClient menerima tanggapan dari server. Sehingga terjadilah komunikasi yang baik.

3. Langkah – langkah pembuatan Socket TCP ?

Langkah-langkah untuk menciptakan Class Client : 
  • Membuat kelas object socket Socket client = new Socket(server, port_id); 
  • Membuat I/O streams untuk berkomunikasi dengan server. is = new DataInputStream(client.getInputStream()); 
  • os = new DataOutputStream(client.getOutputStream());
  • Membuat I/O untuk menerima tanggapan dari server
  • Menerima informasi dari serve r: String line = is.readLine(); 
  • Mengirim informasi ke server: os.writeBytes("Hello\n"); 
  • Tutup socket ketika selesai
  • client.close();
Langkah-langkah untuk menciptakan Class Server :
  • Membuat Server Socket 
  • ServerSocket server = new ServerSocket( PORT ); 
  • Menunggu Request dari client Socket client = server.accept(); 
  • Menciptakan I/O streams untuk komunikasi dengan client  DataInputStream is = new DataInputStream(client.getInputStream()); 
  • DataOutputStream os = new DataOutputStream(client.getOutputStream()); 
  • Membuat I/O untuk menerima tanggapan dari client  Menerima informasi dari client: String line = is.readLine(); 
  • Mengirimkan informasi ke client: os.writeBytes("Hello\n"); 
  • Menutup Socket  client.close();
4. A.  SimpleClient Socket

Kode Program
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

/**
 *
 * @author F3
 */
public class SimpleClient_Nurul {
     public static void main (String args [] ) throws IOException
     { //Open your connection to a server, at port 1254
         Socket s1 = new Socket ("localhost",1254); //get an input file handle from the socket and read input
         DataInputStream dis = new DataInputStream (s1.getInputStream());
         String st = new String (dis.readUTF());
         System.out.println(st); //When done, just close the connection and exit
         dis.close();
         s1.close();
     }
    
}
Hasilnya:


Kesimpulan :
Socket client berjalan dengan baik karena telah diberikan nomor port yaitu 1254 sehingga I/O Stream dapat berkomunikasi dengan baik dengan server dan server menerima request dari client.

B.  SimpleServer Socket

Kode Program
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
 *
 * @author F3
 */
public class SimpleServer_Nurul {
    public static void main (String args [] ) throws IOException      
    { //Register service on port 1254
        ServerSocket s = new ServerSocket (1254);
        Socket s1=s.accept(); //Wait and accept a connection
        //Get a communication stream associated with socket
        DataOutputStream dos = new DataOutputStream (s1.getOutputStream());
        //Send a string!
        dos.writeUTF("Hi there");
        //Close the connection, but not the server socket
        dos.close();
        s1.close();
    }
}

Kesimpulan :
Request yang ditunggu dari client Socket berjalan dengan baik, menerima tanggapan dari client, informasi yang diberikan kepada Client baik. Sehingga terjadilah komunikasi dengan baik. 

1. Buatlah suatu program pengiriman suatu kata yang berisikan “Nama Mahasiswa & NPM ” dari Client kepada socket server.
2. Buatlah program chating satu sisi, yaitu client dapat menginputkan data String secara berulang ke Server.

Jawab:

1. Client Kepada Socket Server

Kode Program CLient
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

/**
 *
 * @author TOSHIBA
 */
public class client_nurul {
private static int SRV_PORT = 5000; 
private static ObjectOutputStream os=null;
public static void main(String argv[]) throws Exception{ try{

Socket SocketClient= new Socket("127.0.0.1", SRV_PORT);
os= new
ObjectOutputStream(SocketClient.getOutputStream());

nurulmahpiroh nurma= new nurulmahpiroh("Nurul xxxx","17.1.03.02.xxxx");
os.writeObject(nurma);
System.out.println("Client mengirim data Mahasiswa:"); nurma.print();
}
catch(Exception e){ e.printStackTrace();
}
}
}
Kode Program Server

import java.io.ObjectInputStream;
import java.net.*; 
/**
 *
 * @author TOSHIBA
 */
public class server_nurul {
   private static int SRV_PORT=5000; private static ObjectInputStream is=null;
public static void main(String argv[]) throws Exception{
ServerSocket SocketServer= new ServerSocket(SRV_PORT); 
Socket SocketClient= SocketServer.accept();
is= new 
ObjectInputStream(SocketClient.getInputStream());
nurulmahpiroh nurma= (nurulmahpiroh) is.readObject(); System.out.println
        ("Server menerima data Mahasiswa");
nurma.print();
}
}
Kode program implement

import java.io.Serializable;

/**
 *
 * @author TOSHIBA
 */
public class nurulmahpiroh implements Serializable{ String nama;
String npm;
public nurulmahpiroh (String nama, String npm)
{
this.nama=nama; this.npm= npm;
}
public void print()
{
System.out.println("Data Mahasiswa: "); 
System.out.println("Nama : " + nama);
System.out.println("NPM : "+ npm);
}
}
2. Kode program

2. Chatting Satu Sisi

Kode Program
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 *
 * @author TOSHIBA
 */
public class chatclient_nurul {
    public static void main(String[] args) throws UnknownHostException, IOException {
String temp = ""; do {
try {
Socket client = new Socket(InetAddress.getLocalHost(),1234); 
InputStream clientIn = client.getInputStream();
OutputStream clientOut = client.getOutputStream(); 
PrintWriter pw = new PrintWriter(clientOut, true); 
BufferedReader br = new BufferedReader(new
InputStreamReader(clientIn));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Kirim Pesan ke Server : "); 
temp = stdIn.readLine();
pw.println(temp); System.out.println("Pesan ke Server : "); 
System.out.println(br.readLine()); 
pw.close();
br.close(); client.close();
} catch (ConnectException ce) { System.out.println("Cannot connect to the server.");
} catch (IOException ie) { System.out.println("I/O Error.");
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *
 * @author TOSHIBA
 */
public class chatserver_nurul {
    public static void main(String[] args) throws IOException { ServerSocket server = null;
Socket client; try {
server = new ServerSocket(1234);
} catch (IOException ie) { System.out.println("Cannot Open Socket."); System.exit(1);
}
String temp; while(true) { try {
client = server.accept();
OutputStream clientOut = client.getOutputStream(); 
PrintWriter pw = new PrintWriter(clientOut, true); 
InputStream clientIn = client.getInputStream(); 
BufferedReader br = new BufferedReader(new InputStreamReader(clientIn)); 
temp = br.readLine(); 
System.out.println(temp); 
pw.println(temp); 
br.close();
pw.close(); clientIn.close(); 
clientOut.close();
} catch (IOException ie) { ie.printStackTrace();
}
}
}
}
1. Apa pengertian Socket Multiclient?
2. Bagaimana langkah pembuatan socket multiclient baik dari sisi server maupun dari sisi client?
3. Silahkan jalankan contoh program pada modul socket multiclient diatas. kemudian tulis dan jelaskan hasilnya!
4. Sebutkan contoh minimal 2 aplikasi penggunaan socket multiclient! Jelaskan dari masing-masing contoh tersebut dan berikan penjelasan mengapa anda memilih aplikasi tersebut sebagai contoh socket multiclient!

Jawab:

1. Socket multiclient adalah mekanisme komunikasi yang memungkinkan terjadinya pertukaran data antar program atau proses baik dalam satu mesin maupun antar mesin. Untuk menuat aplikasi socket yang sederhana diperlukan aplikasi. Yaitu, pertama adalah aplikasi server yang akan menerima data, sedangkan aplikasi kedua adalah aplikasi client yang mengirimkan data pada server. Baik aplikasi server dan aplikasi client mendefinisikan port yang sama sebagai jalur komunikasi. Obyek socket pada sisi client dan server berbeda sedikit. Pada sisi aplikasi server, suatu socket server dibentuk dan melakukan operasi listen/menunggu. Operasi ini pada intinya menunggu permintaan koneksi dari sisi client. Sedangkan pada sisi client, dibentuk suatu socket biasa. Pada saat socket client, informasi alamat socket server dilewatkan sebagai argumen dan socket client akan otomatis mencoba meminta koneksi ke socket server. Pada saat permintaan koneksi client sampai pada server, maka server akan membuat suatu socket biasa. Socket ini yang nantinya akan berkomunikasi dengan socket pada sisi clien. Setelah itu socket server dapat kembali melakukan listen untuk menunggu permintaan koneksi dari client lainnya. Langkah ini umumnya hanya dilakukan jika aplikasi server mengimplementasikan multithreading. Setelah tercipta koneksi antara client dan server, maka keduanya dapat saling bertukar pesan. Salah satu atau keduanya kemudian dapat mengakhiri komunikasi dengan menutup socket. 

2. -Sisi Client
  • Membuat kelas object socket :
  • Socket client = new Socket (server, port_id);
  • Membuat I/O streams untuk berkomunikasi dengan server.
  • BufferedReader in = new BufferdReader( new InputStreamReader(sk.getInputStream()));
  • Membuat I/O untuk menerima tanggapan dari server:
  • Menerima informasi dari server : String line = is.readLine();
  • Mengirim informasi ke server : os.writeBytes(“Hello\n”);
  • Tutup socket ketika selesai :
  • Client.close();
-Sisi Server
  • Membuat Server Socket :
  • ServerSocket server = new ServerSocket(PORT);
  • Menunggu Request dari beberapa client dengan memanggil kelas yang kedua menggunakan perulangan :
  • while (true) {
  • new server(ss.accept(), urut).start(); } dan kelas yang kedua untuk penanganan thread yang melayani request dari tiap client :      
  • Menciptakan kelas Thread dengan implement runnable atau kelas turunannya.
  • Menciptakan I/O streams untuk komunikasi dengan tiap client :
  • PrintWriter out = new PrintWriter(sc.getOutputStream(), true);
  • Membuat I/O untuk menerima atau mengirim tanggapan dari atau ke client :
  • System.out.println(“Selamat Datang Client ke- “ +angka);
3. Kode Program Server Basic

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author TOSHIBA
 */
public class ServerBasic_nurul {
    public static void main (String args[]) throws IOException {
        ServerSocket ss = new ServerSocket(1236);
        boolean keadaan = true;
        int urut = 1;
        while (keadaan) {
            new server(ss.accept(), urut).start();
            System.out.println("Client ke- " + urut + " Masuk ");
            urut++;
        }
    }
}
    
class server extends Thread {
    static Socket sc= null;
    int angka = 0;
    server (Socket a, int angka) {
        this.angka = angka;
        this.sc = a;
    }
    @Override
    public void run() {
        System.out.println ( "Client Connect " +sc.getInetAddress()+ "OnPort"+ sc.getPort());
        try {
            PrintWriter out = new PrintWriter(sc.getOutputStream(), true);
            out.println("Selamat Datang Client ke-" +angka);
        } catch (IOException ex) {
            Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Kode Program Client Basic 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

/**
 *
 * @author TOSHIBA
 */
public class ClientBasic_nurul {
    
   public static void main(String args[]) {
       try {
           Socket sk = new Socket("127.0.0.1",1236);
           BufferedReader in = new BufferedReader(new InputStreamReader(sk.getInputStream()));
           String put="";
           while (true){
               if((put=in.readLine())!=null){
                   System.out.println(put);
               }
           }
       } catch(IOException e){
           e.printStackTrace();
       }
   }
    
}


Kesimpulan hasilnya : 
Bahwa setiap kode program socket client dan socket server itu mempunyai hubungan yang erat sehingga jika socket server tidak dijalankan terlebih dahulu maka socket client akan terjadi error. Jadi, kita harus menjalankan socket server terlerlebih dahulu agar socket client tidak terjadi error.

4. Contoh Aplikasi 1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 *
 * @author TOSHIBA
 */
public class MultiClient_Nurul {
    private static InetAddress host;
    private static final int PORT = 12345;
    private static Socket link;
    private static BufferedReader in;
    private static PrintWriter out;
      private static BufferedReader keyboard;
    public static void main(String[] args) {
        try {
            host = InetAddress.getLocalHost();
            link = new Socket(host,PORT);
            in = new BufferedReader(new InputStreamReader(link.getInputStream()));
            out = new PrintWriter(link.getOutputStream(),true);
            keyboard = new BufferedReader(new InputStreamReader(System.in));
            String message, response;
            do {                
                System.out.println("Enter message (QUIT to exit)");
                message = keyboard.readLine();
                out.println(message);
                response = in.readLine();
                System.out.println(response);

            } while (!message.equals("QUIT"));                     
        } catch (UnknownHostException e) {
            System.out.println("Host ID not found!");
        }
        catch(IOException e){ e.printStackTrace();      
        }
        finally{
            try {
                if (link != null){
                    System.out.println("Closing down connection");
                    link.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MultiServer_Nurul {
    private static ServerSocket servSock;
    private static final int PORT = 12345;
    public static void main(String[] args) throws IOException{
        System.out.println("Opening Port....\n");
        try {
            servSock = new ServerSocket(PORT);
          } catch (Exception e) {
            System.out.println("Unable to attach to port");
            System.exit(1);
        }
        do {Socket client = servSock.accept();
            ClientHander handler = new ClientHander(client);
            handler.start();
        } while (true);
    }
}
class ClientHander extends Thread{
    private Socket client;
    private BufferedReader in;
    private PrintWriter out;
    public ClientHander(Socket socket){
        client = socket;
        try {
            in = new BufferedReader (
            new InputStreamReader(client.getInputStream())
            );
            out = new PrintWriter(client.getOutputStream(),true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
        public void run(){         
            try{
                String received, balik=""; 
                Integer no=0; 
                do{
                    received = in.readLine();                    
                    no++;
                    int panjang = received.length();
                    for (int i= panjang-1; i >= 0; i--){
                        balik = balik+received.charAt(i);
                    }                                        
                    System.out.println("Message received no:" + no +" "+ received);
                    out.println("SERVER Message no:" + no +" "+ balik); 
                    balik=""; 
                }while(!received.equals("QUIT"));
            }catch(IOException e){
                e.printStackTrace();
            }
            finally{
                try{
                    if (client != null){
                        System.out.println("Closing down connection");
                        client.close();
                    }
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
}
Hasilnya:


Kesimpulan hasilnya :
Jadi, dalam aplikasi ini server diminta untuk mengirim pesan untuk socket client, sehingga pesan terkirim pada client. Tetapi kekurangan disini adalah client tidak bisa mengirim balik ke socket server.

Mengapa saya memilih aplikasi ini : 
Karena, aplikasi ini mudah dipahami dan kode programnya pun terlihat simple.

Contoh Aplikasi 2 :

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 *
 * @author TOSHIBA
 */

public class ChatClient extends JFrame implements Runnable
{
 private Socket             socket    = null;
 private BufferedReader     console   = null;
 private BufferedReader     reader    =  null;
 private PrintWriter        writer    = null;
 private Thread thread;
 private JTextField field;
 private JTextArea area;
 private JButton button;
 private JScrollPane pane;


 public ChatClient(String serverName, int serverPort)
 {
    super("Client");

    setLayout (new FlowLayout());

    field = new JTextField (20);
    area = new JTextArea (20, 20);
    button = new JButton ("Send to Server");
    area.setLineWrap(true);
    pane = new JScrollPane(area);

    add(area);
    add(field);
    add (button);

    addWindowListener(

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

    button.addActionListener (

       new ActionListener()
       {
           public void actionPerformed (ActionEvent event)
           {
               writer.println (field.getText());
               area.append ("CLIENT :   " + field.getText() +"\n");
               field.setText("");
           }
       }
   );
System.out.println("Establishing connection. Please wait ...");
    try
    {  socket = new Socket(serverName, serverPort);
       System.out.println("Connected: " + socket);
       start();
    }
    catch(UnknownHostException uhe)
    {  System.out.println("Host unknown: ");
    }
    catch(IOException ioe)
    {  System.out.println("Unexpected exception: ");
    }




    thread = new Thread (this);
    thread.start();

    setSize (500, 500);
    setVisible (true);

 }

 public void run ()
 {
     boolean flag = true;

     while (flag == true)
     {
         try
            {
                String line = reader.readLine();
                area.append ("SERVER :  " + line + "\n");
            }
         catch (Exception e)
         {}
     }

 }
public void start() throws IOException
 {
   reader = new BufferedReader (new InputStreamReader (socket.getInputStream()));
    console   = new BufferedReader(new InputStreamReader(System.in));
    writer  = new PrintWriter (socket.getOutputStream(), true);
 }


 public static void main(String args[])
 {
   ChatClient client = new ChatClient("localhost", 2000);
 }
}
    import java.net.*;
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

/**
 *
 * @author TOSHIBA
 */
    public class ChatServer  implements Runnable
    {
     private Socket socket = null;
     private ServerSocket    server   = null;
     private Thread thread;
     private int ID = 1;
     public ChatServer(int port)
     {
        try
        {
           System.out.println("Binding to port " + port + ", please wait  ...");
           server = new ServerSocket(port);
       }

       catch(IOException ioe)
        {  System.out.println(ioe);

        }
        thread = new Thread (this);
        thread.start();
     }
     public void run ()
     {
          System.out.println("Server started: " + server);
          System.out.println("Waiting for a client ...");
          boolean flag = true;
          while (flag == true)
          {
              try
               {
                  System.out.println ("I am here");
                  ServerThread st = new ServerThread (server.accept());
                  System.out.println("Client#" + ID + " accepted ");
                  st.open();
                  st.start();
                  ID++;
               }
              catch (IOException e)
              {}
         }
     }
     public static void main(String args[])
     {
         ChatServer server = new ChatServer(2000);
     }

class ServerThread extends JFrame implements Runnable
       {
         private BufferedReader  reader =  null;
         private PrintWriter     writer = null;
         private BufferedReader  console   = null;
         private JTextField field;
         private JTextArea area;
         private JButton button;
         private JScrollPane pane;
         private Socket  socket   = null;
         public ServerThread (Socket s)
         {  super("Server");
            socket = s;
            setLayout (new FlowLayout());
            field = new JTextField (20);
            area = new JTextArea (20, 20);
            button = new JButton ("Send to Client");
            area.setLineWrap(true);
            pane = new JScrollPane(area);
            add(area);
            add(field);
            add (button);
            addWindowListener(

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

            button.addActionListener (

               new ActionListener()
               {
                   public void actionPerformed (ActionEvent event)
                   {
                       writer.println (field.getText());
                       area.append ("SERVER :   " + field.getText());
                       field.setText("");
                   }
               }
           );

            setSize (500, 500);
            setVisible (true);

           }

           public void run()
           {

             boolean flag = true;
Hasilnya:


Kesimpulan hasilnya :
Jadi, seperti yang dijelaskan pada contoh aplikasi 1 bedanya dengan contoh aplikasi 2 yaitu ada form dan tidak. Sehingga, dengan adanya tampilan atau form kita lebih mudah memahaminya.

Mengapa saya memilih aplikasi ini : 
Karena, aplikasi ini mudah dipahami dan kode programnya pun terlihat simple. Tampilannya formnya begitu jelas.

1. Buatlah program client untuk mengirim data string kepada socket server yang mendukung multithread.

2. Buatlah program untuk membaca data string yang diinputkan oleh socket client, kemudian server yang mendukung multithread menjawab sesuai pilihan dari client.

Jawab:

1.Kode Program 

Client

import java.io.*;
import java.net.*;
import java.util.Scanner;
/**
 *
 * @author TOSHIBA
 */
public class Client1_nurul {
    private static InetAddress host;
    private static final int PORT = 1234;
 
    public static void main(String[] args) {
        try {
            host = InetAddress.getLocalHost();
        } catch (UnknownHostException uhEx) {
            System.out.println("\nHost ID tidak ditemukan!\n");
            System.exit(1);
        }
        sendMessages();
    }
 
    private static void sendMessages() {
        Socket socket = null;
        try {
            socket = new Socket(host, PORT);
            Scanner networkInput = new Scanner(socket.getInputStream());
            PrintWriter networkOutput = new PrintWriter(socket.getOutputStream(), true);
 
            //Set up stream untuk masukan dari keyboard...
            Scanner userEntry = new Scanner(System.in);
            String message, response;
            do {
                System.out.print("Masukkan pesan ('QUIT' untuk keluar): ");
                message = userEntry.nextLine();
 
                //Kirim pesan (message)ke server pada output stream socket...
                //Terima respon dari server pada stream input socket...
                networkOutput.println(message);
                response = networkInput.nextLine();
 
                //Tampilkan respon dari server...
                System.out.println("\nSERVER> " + response);
            } while (!message.equals("QUIT"));
        } catch (IOException ioEx) {
            //ioEx.printStackTrace();
        } finally {
            try {
                System.out.println("\nMenutup koneksi...");
                socket.close();
            } catch (IOException ioEx) {
                System.out.println("Gagal menutup koneksi!");
                System.exit(1);
            }
        }
    }
}

Server

import java.io.*;
import java.net.*;
import java.util.Scanner;

/**
 *
 * @author TOSHIBA
 */
public class Server1_nurul {
    private static ServerSocket serverSocket;
    private static final int PORT = 1234;
 
    public static void main(String[] args) throws IOException {
        try {
            serverSocket = new ServerSocket(PORT);
            System.out.println("Server berjalan, menunggu client...");
        } catch (IOException ioEx) {
            System.out.println("\nTidak dapat mensetup port!");
            System.exit(1);
        }
        do {
            //Menunggu koneksi dari client...
            Socket client = serverSocket.accept();
            System.out.println("\nClient baru diterima.\n");
 
            //Buat thread untuk menangani komunikasi dengan client ini
            //lewatkan socket yang relevan ke contructor dari  thread ini
            ClientHandler handler = new ClientHandler(client);
            handler.start();    //menjalankan thread yang telah dibuat
        } while (true);
    }
}
 
class ClientHandler extends Thread {
 
    private Socket client;
    private Scanner input;
    private PrintWriter output;
 
    public ClientHandler(Socket socket) {
        //Set up referensi ke socket yang beraosiasi...
        client = socket;
        try {
            input = new Scanner(client.getInputStream());
            output = new PrintWriter(client.getOutputStream(), true);
        } catch (IOException ioEx) {
            //ioEx.printStackTrace();
        }
    }
 
    public void run() {
        String received;
 
        do {
            //Terima pesan dari client pada input stream socket...
            received = input.nextLine();
            System.out.println(received);
 
            //Echo-kan pesan kembali ke client pada stream output socket...
            output.println("[" + received + "]");
 
            //Ulangi sampai client mengirimkan pesan 'QUIT'...
        } while (!received.equals("QUIT"));
        try {
            if (client != null) {
                System.out.println("Menutup koneksi...");
                client.close();
            }
        } catch (IOException ioEx) {
            System.out.println("Penutupan koneksi gagal!");
        }
    }
}


2.Kode Program

Client

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author TOSHIBA
 */
public class Client2_nurul {
    public static void main(String[] args) {
try {
Socket s = new Socket("localhost", 5136);
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
String pesan = "Siapa anda ?? \r\n";
os.write(pesan.getBytes());
int c;
while(true)
{
c=is.read();
System.out.print((char)c);

if((char)c=='\n')
break;
}
is.close();
os.close();
s.close();
} catch (UnknownHostException ex) {
Logger.getLogger(Client2_nurul.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Client2_nurul.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

Server

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
/**
 *
 * @author TOSHIBA
 */
public class Server2_nurul {
    public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(5136);
Socket s = ss.accept();
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
String respon = "Saya Nurul Mahpiroh\r\n";
int c;
while(true)
{
c=is.read();
System.out.print((char)c);

if((char)c=='\n')
break;
}
os.write(respon.getBytes());
os.flush();
os.close();
is.close();
s.close();
} catch (IOException ex) {
Logger.getLogger(Server2_nurul.class.getName()).log(Level.SEVERE, null, ex);
}

}
}
Helmy Kediri
Helmy Kediri Sebaik-baik manusia adalah yang paling bermanfaat bagi orang lain. Ketika seseorang telah meninggal dunia, maka terputuslah amalnya kecuali 3 (perkara) : shadaqah jariyah, ilmu yang bermanfaat, dan anak saleh yang mendokan orang tuanya

Posting Komentar untuk "Tugas Praktikum Sistem Terdistribusi"

Berlangganan via Email