1.1 PENDAHULUAN
Bahasa pemrograman java banyak diaplikasikan dalam
berbagai program maupun aplikasi yang berbasis PC atau mobile. Salah satu
penerapannya adalah pada program chatting, dipilihnya bahasa java sebagai
bahasa pembuatan program ini dikarenakan dalam java memiliki kelas thread
sebagai kelas default yang tidak dimiliki oleh bahasa pemrograman lain. Program
chat ini terdiri dari dua sisi, yaitu sisi client dan server. Dalam pembuatan
aplikasi chatting ini, kita harus menyiapkan dua buah PC/Laptop atau lebih
untuk satu dijadikan sebagai server, dan yang lainnya dijadikan sebagai Client.
1.2 PEMBAHASAN
1.2.1 Pembahasan
Source Code
1.2.1.1 Pembahasan
kelas Server
public class iniserver {
private static ServerSocket serverSocket;
private static final int PORT = 1111;
Kode
diatas merupakan perintah agar socket server hanya dapat diakses oleh sendiri. Port = 1111 merupakan port yang disiapkan pada server diatas. iniserver merupakan nama
kelas program javanya.
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);
}
Kode
diatas merupakan perintah untuk membuat sebuar socket server bernama
serverSocket. “Server berjalan, menunggu client…” akan muncul ketika program dijalankan.
"\nTidak dapat mensetup port!" akan muncul ketika program dijalankan
saat masih ada program yang sama yang dijalankan.
do {
Socket client = serverSocket.accept();
System.out.println("\nClient baru diterima.\n");
ClientHandler handler = new ClientHandler(client);
handler.start();
}
while (true);
Kode diatas merupakan perintah untuk
menunggu client terhubung / connect pada server. Selama masih ada client yang
ingin masuk maka server tetap bisa menerima client tersebut.
class ClientHandler extends Thread {
private Socket client;
private Scanner input;
private PrintWriter output;
private Scanner userEntry;
public ClientHandler(Socket socket) {
client = socket;
try {
input = new
Scanner(client.getInputStream());
output = new
PrintWriter(client.getOutputStream(), true);
userEntry = new Scanner(System.in);
} catch (IOException ioEx) {
//ioEx.printStackTrace();
Kode
diatas merupakan thread untuk mensetup referensi ke socket. Input merupakan
Scanner untuk mendapatkan input. Output merupakan perintah agar menerima
masukan dari keyboard.
public void run() {
String received;
String message;
do {
received =
input.nextLine();
System.out.println(received);
System.out.print("");
System.out.print("server: ");
message =
userEntry.nextLine();
output.println(message);
} while
(!received.equals("QUIT"));
Kode diatas berfungsi untuk
menerima dan mengirimkan pesan pada input stream socket. Program diatas akan
terus berjalan selama client tidak mengirimkan pesan QUIT.
try {
if (client != null) {
System.out.println("Menutup
koneksi...");
client.close();
}
} catch (IOException ioEx) {
System.out.println("Penutupan koneksi
gagal!");
Kode diatas berfungsi untuk
mengakhiri program.
1.2.2.2 Pembahasan kelas
Client
public class Client {
private static
InetAddress host;
private static final
int PORT = 1111;
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();
}
Kode
diatas merupakan perintah agar socket server hanya dapat diakses oleh sendiri. Port = 1111 merupakan port yang disiapkan pada server diatas. client merupakan nama kelas program
javanya.
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);
Scanner
userEntry = new Scanner(System.in);
String
message, response;
do {
System.out.print("klien 1: ");
message =
userEntry.nextLine();
networkOutput.println(message);
response =
networkInput.nextLine();
System.out.println("\nSERVER> " + response);
} while
(!message.equals("QUIT"));
Kode
diatas merupakan perintah untuk mensetup stream untuk masukan dari keyboard,
yang kemudian di scan oleh scanner
UserEntry dan di simpan dalam string
message. Setelah itu program akan mengirimkan pesan ke server dan menunggu
server merespon pesan tersebut. Kode akan berjalan selama message tidak
menampilkan QUIT.
try {
System.out.println("\nMenutup koneksi...");
socket.close();
}
catch (IOException ioEx) {
System.out.println("Gagal menutup koneksi!");
System.exit(1);
Kode diatas merupakan perintah
untuk mengakhiri program ketika user akan keluar.
1.3 Lampiran
1.3.1 Kelas Server
Berikut adalah listing program aplikasi chatting
kelas server:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class iniserver {
private static ServerSocket serverSocket;
private static final int PORT = 1111;
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;
private Scanner userEntry;
public ClientHandler(Socket socket) {
//Set up referensi ke socket yang berasosiasi...
client = socket;
try {
input = new Scanner(client.getInputStream());
output = new PrintWriter(client.getOutputStream(), true);
userEntry = new Scanner(System.in);
} catch (IOException ioEx) {
//ioEx.printStackTrace();
}
}
public void run() {
String received;
String message;
do {
//Terima pesan dari client pada input stream socket...
received = input.nextLine();
System.out.println(received);
System.out.print("");
System.out.print("server: ");
message
= userEntry.nextLine();
//Kirim pesan (message)ke client pada output stream socket...
//Terima
respon dari client pada stream input socket...
output.println(message);
//Ulangi sampai client mengirimkan pesan 'KELUAR'...
} while (!received.equals("KELUAR"));
try {
if (client != null) {
System.out.println("Menutup koneksi...");
client.close();
}
} catch (IOException ioEx) {
System.out.println("Penutupan koneksi gagal!");
}
}
}
1.3.2 Kelas Client
Berikut adalah listing program aplikasi chatting
kelas client:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Client {
private static InetAddress host;
private static final int PORT = 1111;
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("klien 1:
");
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("KELUAR"));
} 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);
}
}
}
}
Untuk lebih jelas silakan Download disini
Tidak ada komentar:
Posting Komentar