Aplikasi Chatting Multiclient Dengan Java
-
Upload
niki-astri -
Category
Documents
-
view
62 -
download
6
description
Transcript of Aplikasi Chatting Multiclient Dengan Java
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
APLIKASI CHATTING MULTICLIENT DENGAN JAVA
Chatting menurut Bahasa Indonesia artinya mengobrol atau bercakap-cakap. Chatting
memungkinkan kita dapat mengobrol dengan teman, keluarga, saudara atau mungkin mencari
teman baru yang belum kita kenal. Chatting memungkinkan kita untuk selalu bisa
berkomunikasi walaupun kita tidak berada bersamanya di suatu tempat. Aplikasi chatting
merupakan suatu aplikasi yang memungkinkan pengguna (client) berkomunikasi teks secara
langsung (Real Time) dengan pengguna lain dengan menggunakan media yang ada.
Java merupakan suatu bahasa pemograman yang multi platform dan multi device. Java
juga merupakan bahasa pemograman yang berorientasi objek dan program java tersusun dari
bagian yang disebut kelas. Kelas terdiri atas metode-metode yang melakukan pekerjaan dan
mengembalikan informasi setelah melakukan tugasnya. Beberapa keunggulan java yaitu java
merupakan bahasa yang sederhana. Java dirancang agar mudah dipelajari dan digunakan secara
efektif.
Pada bagian kali ini saya akan mencoba untuk membuat suatu aplikasi chatting multiclient
sederhana dengan menggunakan tampilan grafis berbasis bahasa pemograman java. Dimana
nanti masing-masing client yang terhubung ke jaringan dapat langsung bercakap-cakap secara
langsung.
Pertama yang harus dilakukan kita terlebih dahulu melakukan setting alamat IP pada
masing-masing client. Pada percobaan ini kita akan menggunakan 1 server dan 3 client, pada
program ini maksimal client adalah 6 client. Adapun alamat IP nya adalah sebagai berikut :
a. Server
Ip address : 10.10.10.2
Netmask : 255.0.0.0
b. Client 1
Ip address : 10.10.10.1
Netmask : 255.0.0.0
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
c. Client 2
Ip address : 10.10.10.3
Netmask : 255.0.0.0
Setelah melakukan konfigurasi IP pada masing-masingi komputer kemudian kita juga
harus memastikan bahwa firewall pada masing-masing komputer harus diaktifkan karena
pada beberapa kasus program ini tidak dapat saling terkoneksi akibat firewall yang aktif pada
sistem operasinya.
Kemudian langkah selanjutnya kita mengetikan listing program java untuk aplikasi
chatting ini dengan menggunakan TextPad. Programnya terbagi menjadi dua bagian yaitu bagian
server dan client. Adapun listing programnya adalah sebagai berikut.
1. MultiThreadChatServer.java
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;
/*
* chat server yang mengantar pesan publik dan private.
*/
public class MultiThreadChatServer {
// server socket.
private static ServerSocket serverSocket = null;
// client socket.
private static Socket clientSocket = null;
// chat server dapat menerima sampai maxClientsCount pada koneksi client.
private static final int maxClientsCount = 10;
private static final clientThread[] threads = new
clientThread[maxClientsCount];
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
public static void main(String args[]) {
// default port number.
int portNumber = 2222;
if (args.length < 1) {
System.out
.println("Usage: java MultiThreadChatServer \n"
+ "Now using port number=" + portNumber);
} else {
portNumber = Integer.valueOf(args[0]).intValue();
}
/*
* buka server socket pada portNumber (default 2222). catatan:kita tidak
da
* pat memilih port dibawah 1023 jika kita bukan administrator (root).
*/
try {
serverSocket = new ServerSocket(portNumber);
} catch (IOException e) {
System.out.println(e);
}
/*
* buat client socket untuk setiap koneksi dan sesuaikan dengan thread
* client baru.
*/
while (true) {
try {
clientSocket = serverSocket.accept();
int i = 0;
for (i = 0; i < maxClientsCount; i++) {
if (threads[i] == null) {
(threads[i] = new clientThread(clientSocket, threads)).start();
break;
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
}
}
if (i == maxClientsCount) {
PrintStream os = new PrintStream(clientSocket.getOutputStream());
os.println("Server too busy. Try later.");
os.close();
clientSocket.close();
}
} catch (IOException e) {
System.out.println(e);
}
}
}
}
/*
* Thread chat client . thread client ini membuka input dan output
* streams untuk hubungan client, menanyakan nama client,menginformasikan
semua
* client yang terhubung ke server bahwa ada client baru yang terhubung ke
da-
* lam chatroom, selama data diterima, data di kembalikan ke semua
* client. saat client meninggalkan chatroom thread ini juga menginformasikan
* pada client lainnya.
*/
class clientThread extends Thread {
private DataInputStream is = null;
private PrintStream os = null;
private Socket clientSocket = null;
private final clientThread[] threads;
private int maxClientsCount;
public clientThread(Socket clientSocket, clientThread[] threads) {
this.clientSocket = clientSocket;
this.threads = threads;
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
maxClientsCount = threads.length;
}
public void run() {
int maxClientsCount = this.maxClientsCount;
clientThread[] threads = this.threads;
try {
/*
* membuat input dan output streams untuk client.
*/
is = new DataInputStream(clientSocket.getInputStream());
os = new PrintStream(clientSocket.getOutputStream());
os.println("Enter your name.");
String name = is.readLine().trim();
os.println("Hello " + name
+ " to our chat room.\nTo leave enter /quit in a new line");
for (int i = 0; i < maxClientsCount; i++) {
if (threads[i] != null && threads[i] != this) {
threads[i].os.println("*** A new user " + name
+ " entered the chat room !!! ***");
}
}
while (true) {
String line = is.readLine();
if (line.startsWith("/quit")) {
break;
}
for (int i = 0; i < maxClientsCount; i++) {
if (threads[i] != null) {
threads[i].os.println("
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
threads[i].os.println("*** The user " + name
+ " is leaving the chat room !!! ***");
}
}
os.println("*** Bye " + name + " ***");
/*
* buat variabel thread terakhir menjadi null agar client baru
* dapat diterima oleh server.
*/
for (int i = 0; i < maxClientsCount; i++) {
if (threads[i] == this) {
threads[i] = null;
}
}
/*
* tutup output stream, tutup input stream, tutup socket.
*/
is.close();
os.close();
clientSocket.close();
} catch (IOException e) {
}
}
}
2. MultiThreadChatClient.java
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
public class MultiThreadChatClient implements Runnable {
// client socket
private static Socket clientSocket = null;
// output stream
private static PrintStream os = null;
// input stream
private static DataInputStream is = null;
private static BufferedReader inputLine = null;
private static boolean closed = false;
public static void main(String[] args) {
// default port.
int portNumber = 2222;
// default host.
String host = "10.10.10.2";
if (args.length < 2) {
System.out
.println("Usage: java MultiThreadChatClient
\n"
+ "Now using host=" + host + ", portNumber=" +
portNumber);
} else {
host = args[0];
portNumber = Integer.valueOf(args[1]).intValue();
}
/*
* Buka sebuah socket pada host dan port. Buka input dan output
streams.
*/
try {
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
clientSocket = new Socket(host, portNumber);
inputLine = new BufferedReader(new InputStreamReader(System.in));
os = new PrintStream(clientSocket.getOutputStream());
is = new DataInputStream(clientSocket.getInputStream());
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + host);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to the
host "
+ host);
}
/*
* Jika semua telah diinisialisasi lalu kita ingin menulis data
pada socket yang kita buka pada koneksi port number.
*/
if (clientSocket != null && os != null && is != null) {
try {
/* Buat sebuah thread untuk membaca dari server. */
new Thread(new MultiThreadChatClient()).start();
while (!closed) {
os.println(inputLine.readLine().trim());
}
/*
* tutup output stream, tutup input stream, tutup socket.
*/
os.close();
is.close();
clientSocket.close();
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
}
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
/*
* buat sebuah thread untuk membaca dari server.
*/
public void run() {
/*
* tetap membaca dari socket sampai kita menerima "Bye" dari
* server. setelah diterima maka break.
*/
String responseLine;
try {
while ((responseLine = is.readLine()) != null) {
System.out.println(responseLine);
if (responseLine.indexOf("*** Bye") != -1)
break;
}
closed = true;
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
}
Jika kedua program telah selesai dibuat maka kita compile program tersebut dengan
menekan tombol CTRL + 1. Jika progam tidak memiliki kesalahan akan timbul pesan Tool
Compiled Successfully. Kemudian jalankan program dengan CMD. Adapun hasil programnya
adalah sebagai berikut :
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
1. MultiThreadChatServer.java
Gambar 1. Pada Server
2. MultiThreadChatClient.java Pada Client
Gambar 2. Pada Client 1
-
Politeknik Negeri Sriwijaya
Niki Astri | Teknik Komputer
Gambar 2. Pada Client 1
Gambar 3. Pada Client 2
Dari Program yang telah dibuat dapat diketahui bahwa dengan menggunakan fungsi
socket pada java, antara komputer cilent dan server dapat saling tehubung. Dengan fungsi
Thread antara komputer client dengan client lainnya dapat saling terus menerus
berkomunikasi tanpa harus saling menunggu balasan. Karena fungsi thread tersebut akan
menjalankan proses pengiriman pesan disaat yang bersamaan dan masing-masing client dapat
mengetahui client yang baru bergabung pada suatu jaringan. Percobaan yang dilakukan berjalan
dengan sukses Jika terjadi error mungkin terdapat kesalahan pada salah satu baris program yang
dijalankan dan dapat diketahui pada saat anda mengcompile file tersebut.