TCPEmailServer TCPEmailClient
TCPEmailServer TCPEmailClient
nurutomo
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
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);
}
}
}
}