0% menganggap dokumen ini bermanfaat (0 suara)
26 tayangan8 halaman

TCPEmailServer TCPEmailClient

Program ini membangun aplikasi client-server menggunakan socket untuk mengirim dan menerima pesan. Server dapat menerima pesan maksimal 10 pesan dari dua pengguna, Andi dan Budi. Pengguna dapat mengirim pesan ke pengguna lain dan membaca pesan yang diterima. Program ini mendemonstrasikan proses pengiriman dan pembacaan pesan antara klien dan server.

Diunggah oleh

Ronny Sianturi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
26 tayangan8 halaman

TCPEmailServer TCPEmailClient

Program ini membangun aplikasi client-server menggunakan socket untuk mengirim dan menerima pesan. Server dapat menerima pesan maksimal 10 pesan dari dua pengguna, Andi dan Budi. Pengguna dapat mengirim pesan ke pengguna lain dan membaca pesan yang diterima. Program ini mendemonstrasikan proses pengiriman dan pembacaan pesan antara klien dan server.

Diunggah oleh

Ronny Sianturi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 8

@aryo.

nurutomo

Aplikasi TCPEmailServer dan TCPEmailClient


Kembangkan dari program TCPEchoServer dan TCPEchoCLient, buatlah program Client-Server
menggunakan Socket, terdapat 1 server dan 1 client. Skenario program yang akan kalian kerjakan adalah
sebagai berikut:

Server hanya mengenali dua user yaitu ”Andi” dan ”Budi”


Setiap user mempunyai message box pada server yang dapat menerima maksimum 10 pesan.
Setiap user dapat mengirim atau membaca pesan.
Setiap ada pesan yang masuk maka jumlah pesan akan ditambah(Tapi jika message box sudah penuh
maka pesan akan diabaikan). Jika pesan sudah dibaca maka jumlah pesan akan diset 0.
Pada saat user mengirim pesan maka ketikkan :

 Andi send
Enter message : <pesan>

Pesan yang dikirim oleh Andi akan masuk ke message box Budi atau sebaliknya, pesan yang dikirim
oleh Budi akan masuk ke message box Andi.
Pada saat user membaca pesan maka user mengetikkan :

 Andi read

Maka akan tampak pesan-pesan yang ada pada message box.

Jika telah selesai ketik close.

Output Program

Pertama-tama pada client ketikkan Andi send, kemudian masukkan pesan yang akan dikirimkan ke Andi.
Jika sudah, maka pada server, ditampilkan pesan : Message From Andi : Pesan 1 dari Andi.

 TCPEmailClient[:EmailClient.main()]
 
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 1 dari Andi
Enter [name] send or read : 

 TCPEmailServer[:EmailServer.main()]
 
Opening Port.....
 
Message From Andi : Pesan 1 dari Andi

Sebagai user Andi lakukan pengiriman pesan sebanyak 3 kali dengan cara yang sama. Hasil akan tampak
seperti di bawah ini:

1
@aryo.nurutomo

 TCPEmailClient[:EmailClient.main()]
 
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 1 dari Andi
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 2 dari Andi
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 3 dari Andi
Enter [name] send or read : 

 TCPEmailServer[:EmailServer.main()]
 
Opening Port.....
 
Message From Andi : Pesan 1 dari Andi
Message From Andi : Pesan 2 dari Andi
Message From Andi : Pesan 3 dari Andi

Sebagai user Budi lakukan perintah read untuk membaca message box, karena Andi telah mengirim pesan
sebanyak 3 kali, maka message box Budi terdapat 3 pesan. Output seperti gambar di bawah ini:

 TCPEmailClient[:EmailClient.main()]
 
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 1 dari Andi
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 2 dari Andi
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 3 dari Andi
Enter [name] send or read : Budi read
Jumlah Pesan = 3
1 : Pesan 1 dari Andi
2 : Pesan 2 dari Andi
3 : Pesan 3 dari Andi
Enter [name] send or read : 

 TCPEmailServer[:EmailServer.main()]
 
Opening Port.....
 
Message From Andi : Pesan 1 dari Andi
Message From Andi : Pesan 2 dari Andi
Message From Andi : Pesan 3 dari Andi
Message InBox : 3

2
@aryo.nurutomo

Selanjutnya user Budi melakukan perintah send maka ketikkan pesan. Lakukanlah sebanyak 1 kali,
selanjutnya user Andi melakukan read, maka pada message Box Andi terdapat 1 pesan.

 TCPEmailClient[:EmailClient.main()]
 
Enter [name] send or read : Andi send
Enter 1‐line message
Pesan 3 dari Andi
Enter [name] send or read : Budi read
Jumlah Pesan = 3
1 : Pesan 1 dari Andi
2 : Pesan 2 dari Andi
3 : Pesan 3 dari Andi
Enter [name] send or read : Budi send
Enter 1‐line message
Pesan 1 dari Budi
Enter [name] send or read : Andi read
Jumlah Pesan = 1
1 : Pesan 1 dari Budi
Enter [name] send or read : 

 TCPEmailServer[:EmailServer.main()]
 
Opening Port.....
 
Message From Andi : Pesan 1 dari Andi
Message From Andi : Pesan 2 dari Andi
Message From Andi : Pesan 3 dari Andi
Message InBox : 3
Message From Budi : Pesan 1 dari Budi
Message InBox : 1

Adapun program lengkap dari project TCPEmailServer dan TCPEmailClient adalah sebagai berikut :

EmailServer.java

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
 
/**
* @author : aryo.nurutomo
*/

public class EmailServer {

3
@aryo.nurutomo

    private static ServerSocket servSock;
    private static final int PORT = 5000;
    private static final int MAX = 10;
    private static String[] mailbox1 = new String[MAX];   // punya Andi
    private static String[] mailbox2 = new String[MAX];   // punya Budi
    private static int messageInBox1 = 0;   // punya Andi
    private static int messageInBox2 = 0;   // punya Budi
 
    public static void main(String[] args) {
        System.out.println("Opening Port.....\n");
        try {
            servSock = new ServerSocket(PORT);
        } catch (IOException e) {
            System.out.println("Unable to attach to port");
            System.exit(1);
        }
 
        do {
            run();
        } while (true);
    }
 
    public static void doSend(String mailbox[], int messageInBox, BufferedReader in) throws 
IOException {
        //menerima pesan dari client yang akan disimpan di mailbox
        String message = in.readLine();
 
        //tampilkan pesan tersebut di Server
        System.out.println(message);
 
        if (messageInBox == MAX) {
            System.out.println("INBOX FULL");
        } else {
            mailbox[messageInBox] = message;
        }
    }
 
    public static void doRead(String mailbox[], int messageInBox, PrintWriter out) {
        //Tampilkan di server berapa message yang ada di mailbox
        System.out.println("Message InBox : " + messageInBox);
 
        //Jumlah message yang ada di mailbox kirim ke client
        //lakukan perulangan sebanyak jumlah message, selanjutnya tiap message kirim ke client
        String allMessage = new String();
        for (int i =0; i < messageInBox; i++) {
            allMessage = allMessage + mailbox[i] + "|";
        }
        out.println(allMessage);
    }
 
    private static void run() {
        Socket link = null;

        try {

4
@aryo.nurutomo

            link = servSock.accept();
            BufferedReader in = new BufferedReader(new 
InputStreamReader(link.getInputStream()));
            PrintWriter out = new PrintWriter(link.getOutputStream(), true);
            String message = "", name = "", sendRead = "";
 
            do {
                //menerima pesan dari client berupa name dan sendRead (Andi read)
                message = in.readLine();
 
                //lakukan pemecahan String dg menggunakan StringTokenizer simpan
                StringTokenizer tokenizer = new StringTokenizer(message);
                List<String> tokens = new ArrayList<>();
                while (tokenizer.hasMoreTokens()) {
                    tokens.add(tokenizer.nextToken());
                }
                name = tokens.get(0);
                sendRead = tokens.get(1);
 
                //name:Andi or Budi, sendRead = send or read
                if (name.equals("Andi")) {
                    if (sendRead.equals("send")) {
                        System.out.print("Message From Andi : ");
                        doSend(mailbox2, messageInBox2, in);
                        if (messageInBox2 < MAX) {
                            messageInBox2++;
                        }
                    } else if (sendRead.equals("read")) {
                        doRead(mailbox1, messageInBox1, out);
                        messageInBox1 = 0;
                    }
                } else if (name.equals("Budi")) {
                    if (sendRead.equals("send")) {
                        System.out.print("Message From Budi : ");
                        doSend(mailbox1, messageInBox1, in);
                        if (messageInBox1 < MAX) {
                            messageInBox1++;
                        }
                    } else if (sendRead.equals("read")) {
                        doRead(mailbox2, messageInBox2, out);
                        messageInBox2 = 0;
                    }
                }
            } while (!message.equals("close"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                System.out.println("*******Closing Connection*******");
                link.close();
            } catch (IOException e) {
                System.out.println("Unable to disconnect");

                System.exit(1);

5
@aryo.nurutomo

            }
        }
    }
}

EmailClient.java

 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;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
 
/**
* @author : aryo.nurutomo
*/
public class EmailClient {
    private static String strHost ;
    private static InetAddress host;
    private static final int PORT = 5000;
    private static BufferedReader userEntry ;
    private static BufferedReader in ;
    private static PrintWriter out;
 
    public static void main(String[] args) {
        userEntry = new BufferedReader(new InputStreamReader(System.in));
        try {
            host = InetAddress.getLocalHost();
            //strHost = args[0];
            //host = InetAddress.getByName(strHost);
        } catch (UnknownHostException e) {
            System.out.println("Host ID Not Found");
            System.exit(1);
        }
        run();
    }
 
    private static void doSend() throws IOException {
        //masukkan message
        System.out.println("Enter 1‐line message");
        String message = userEntry.readLine();
 
        //kirim ke server
        out.println(message);
    }

6
@aryo.nurutomo

    private static void doRead() throws IOException{
        //menerima dari server jumlah pesan yang ada di mailbox dalam bentuk string
        //ubah menjadi int
        //lakukan sebanyak jumlah pesan, untuk menerima dari pesan dari server
        String allMessage = new String();
        allMessage = in.readLine();
        StringTokenizer st = new StringTokenizer(allMessage, "|");
        System.out.println("Jumlah Pesan = " + st.countTokens());
        int countMessage = 1;
        while (st.hasMoreTokens()) {
            System.out.println(countMessage + " : " + st.nextToken());
            countMessage++;
        }
    }
 
    private static void run() {
        Socket link = null;
        try {
            link = new Socket(host, PORT);
 
            in = new BufferedReader(new InputStreamReader(link.getInputStream()));
            out = new PrintWriter(link.getOutputStream(), true);
            String message = new String();
            do {
                String name="", sendRead="";
                do {
                    //masukkan name_sendRead misal Andi send
                    //kirim ke server
                    System.out.print("Enter [name] send or read : " );
                    message = userEntry.readLine();
                    out.println(message);
 
                    if (!message.equals("close")) {
                        //lakukan pemecahan name = 'Andi' sendRead = 'send'
                        StringTokenizer tokenizer = new StringTokenizer(message);
                        List<String> tokens = new ArrayList<>();
                        while (tokenizer.hasMoreTokens()) {
                            tokens.add(tokenizer.nextToken());
                        }
                        name = tokens.get(0);
                        sendRead = tokens.get(1);
                    }
                } while (name.equals("Andi") && name.equals("Budi"));
                if (!message.equals("close")) {
                    if (name.equals("Andi")) {
                        if (sendRead.equals("send")) {
                            doSend();
                        } else if (sendRead.equals("read")) {
                            doRead();
                        }
                    } else if (name.equals("Budi")) {
                        if (sendRead.equals("send")) {

                            doSend();

7
@aryo.nurutomo

                        } else if (sendRead.equals("read")) {
                            doRead();
                        }
                    }
                }
            } while (!message.equals("close"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                System.out.println("closing connection");
                link.close();
            } catch (IOException e) {
                System.out.println("Unable to disconnect!");
                System.exit(1);
            }
        }
    }
}

Anda mungkin juga menyukai