Pemrograman
Jaringan Komputer
Chatting
dengan Beberapa PC/Laptop
Program ini digunakan untuk chating
dengan beberapa PC/Laptop. Berikut adalah listing codenya.
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];
public static void main(String args[]) {
// default port number.
int portNumber = 2222;
if (args.length < 1) {
System.out
.println("Usage: java
MultiThreadChatServer <portNumber>\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;
}
}
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;
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("<" + name + "&gr; " +
line);
}
}
}
for (int i = 0; i < maxClientsCount;
i++) {
if (threads[i] != null &&
threads[i] != this) {
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) {
}
}
}
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;
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.17.193.86";
if
(args.length < 2) {
System.out
.println("Usage: java MultiThreadChatClient <host>
<portNumber>\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 {
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);
}
}
}
/*
* 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);
}
}
}
Pertama, running program MultiThreadChatServer.java,
kemudian akan muncul tampilan seperti ini.
Jika ingin lebih jelasnya, silahkan download filenya dibawah ini:

0 komentar:
Posting Komentar