Kami persembahkan sebuah materi yang merupakan hasil dari penuntasan Tugas 2 Multi Client Server pada mata kuliah Pemrograman Jaringan, yang dibimbing oleh Bp. Untung Subagyo, S.Kom. Program ini dibuat menggunakan Netbeans IDE versi 8.2.

Figure 1 - Pemrograman Java Multi Client Server
Studi Kasus:
Buatlah program server-client dengan menggunakan TCP Socket. Pertama kali aktifkan server. Misal pada client ketik "salam" selanjutnya string ini akan dikirim ke server, pada server string akan dibalik sehingga menjadi "malas". String yang sudah dibalik tadi selanjutnya dikirim kembali ke client.
Sedangkan pada server tampilkan pesan:
Message received <no pesan> : <pesan yang dikirim>
Pada client akan menampilkan pesan:
SERVER Message <no pesan> : <pesan dari server yang sudah di balik>
Penyelesaian:
Langkah 1 -- Mempersiapkan Project
- Buka Aplikasi NetBeans IDE
- Buat project java application dengan nama "MultiEchoServer"
- Buat project java application dengan nama "MultiEchoClient"
Langkah 2 -- Download Source Codenya di SINI
Langkah 3 -- Adopsi Source Code Yang Sudah Didownload
- Adopsi source code MultiEchoServer.java untuk project "MultiEchoServer"
- Adopsi source code MultiEchoClient.java untuk project "MultiEchoClient"
Langkah 4 -- Modifikasi Code MultiEchoServer
Modifikasi bagian method run() sehingga menjadi seperti berikut:

Figure 2 - Modifikasi Method run()
Keterangan:
- Dekalrasi variabel no=0; //variabel ini digunakan untuk mengidentifikasi pesan yang masuk dari client.
- no++; //increment operator, untuk menambahkan nilai no. sebanyak 1, seiring berjalannya looping.
- Int panjang //variabel yang mengadopsi panjang string, yang digunakan untuk parameter perulangan.
Menyesuaikan pesan yang ditampilkan sebagaimana telah ditentukan pada studi kasus, yaitu:
- System.out.println("Message received #no:" + no +" "+ received); //menampilkan pesan client beserta no.nya.
- out.println("SERVER Message #no:" + no +" "+ balik); //menampilkan respon server yang sudah dibalik dan beserta no.pesannya.
Capture

Figure 3. Pesan Client A dan Feedback dari Server

Figure 4. Pesan Client B dan Feedback dari Server

Figure 5. Respon Sever Terhadap Client A dan Client B
Source Code Selengkapnya
Barangkali ada yang ingin mengadopsi source codenya saja.
MultiEchoServer.java
package multiechoserver;
import java.io.*;
import java.net.*;
public class MultiEchoServer {
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();
}
}
/* Wawan Chahyo Nugroho NIM:12131294 */
public void run(){
try{
String received, balik=""; //tambahkan variabel balik untuk manampung pembalikan
Integer no=0; //variabel no. untuk identifikasi pesan dari client
do{
received = in.readLine();
no++; //penambahan nilai no. seiring berjalannya looping
/*Perulangan yang digunakan untuk membalik pesan client
dengan memanfaatkan length string untuk mengambil ekor stringnya*/
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); //menampilkan pesan client beserta no.nya
out.println("SERVER Message #no:" + no +" "+ balik); //menampilkan respon server yang sudah dibalik dan beserta no.pesannya.
balik=""; //untuk mereset variabel 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();
}
}
}
}
MultiEchoClient.java
package multiechoclient;
import java.io.*;
import java.net.*;
public class MultiEchoClient {
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();
}
}
}
}
Mission Completed!