Deden Networkprogramming
Deden Networkprogramming
SOCKET PROGRAMMING
Abstract
BUKU PANDUAN INI MERUPAKAN PANDUAN PRAKTIKUM NETWORK PROGRAMMING UNTUK
MATA KULIAH MOBILE PROGRAMMING
DEDEN ARDIANSYAH
SOCKET PROGRAMMING (TCP dan UDP)
Tujuan
Mahasiswa memahami konsep aplikasi client server di jaringan.
Mahasiswa memahami konsep pemprograman socket.
Mahasiswa memahami jenis – jenis socket programming
Mahasiswa mampu membangun program socket sederhana
Dasar Teori
Setiap aplikasi di jaringan, transaksinya didasarkan pada konsep client‐server. Sebuah server dan
sebuah atau beberapa client yang meminta/request pelayanan ke server. Fungsi server sebagai
pengatur resource yang ada, yang menyediakan pelayanan dengan memanfaatkan resource yang untuk
kebutuhan client. Proses ini (proses client‐server) bisa dijalankan pada sebuah komputer (komputer
tunggal) atau bisa juga satu komputer berfungsi sebagai server dan sebuah atau beberapa komputer
berfungsi sebagai client.
Server
socket()
Client
bind()
socket()
sendto() data
close()
Setelah mendapatkan installer, jalankan installer dengan mengklik dua kali berkas jdk-
8u66-windows-i586.exe
Langkah-langkah instalasi:
1. Setelah installer terbuka, akan muncul jendela seperti tampilan berikut, lalu klik tombol
Next:
2. Setelah klik tombol Next akan muncul jendela berikut, alamat direktori instalasi perlu
anda catat terlebih dahulu, yaitu C:\Program Files\Java\jdk1.8.0_66\, lalu klik
tombol Next:
8. Setelah menu system terbuka, lalu klik menu "Pengaturan sistem tingkat lanjut" atau
"Advanced System Setting":
11. pada isian Variable name: beri nama JAVA_HOME sedangkan isian Variable
value: diberi alamat direktori instalasi java dilangkah 2 tadi, yaitu C:\Program
Files\Java\jdk1.8.0_66
lalu klik tombol OK
12. Setelah itu, JAVA_HOME telah tampil didaftar System Variables, lalu sorot
variable Path yang berada dibawah JAVA_HOME seperti pada gambar berikut, setelah
itu klik menu Edit:
13. Ketika menu edit terbuka, akan muncul jendela Edit environment variable berikut, lalu
klik tombol New yang berada di pojok kanan atas:
14. Salin alamat direktori instalasi java dilangkah 2 ke masukan baru tapi
ditambahi backslash bin seperti gambar berikut (C:\Program
Files\Java\jdk1.8.0_66\bin):
15. Lalu buka menu program cmd, dengan mengklik tombol pencarian dipojok kiri bawah:
16. Setelah jendela command prompt terbuka, ketik perintah javac -version untuk
melihat versi javac:
2. Cara Compile Java
Bagaimana jika kita mau compile dan run sebuah file java di command prompt? Iya,
command prompt yang biasa kita kenal untuk DOS. Berikut persiapan dan langkah –
langkahnya.
1. Mula – mula cek terlebih dahulu untuk PATH nya, apakah sudah tersedia atau belum.
Tampilan yang ada menggunakan Windows 7 ya
Klik Start Menu, lalu di My Computer, klik kanan, dan pilih Properties.
Pilih Tab Advanced (di Windows XP) atau Advanced System Settings (di Windows 7)
Jika belum, silahkan ikuti langkah berikut, jika sudah, lanjutkan ke langkah
berikutnya
– Isi seperti tampilan berikut ini, jika anda menginstal Java pada drive yang berbeda,
silahkan disesuaikan dengan tempat anda menginstal java nya. Lalu klik OK sebanyak 2 kali.
2. Jika PATH nya sudah tersedia, mari kita buka Command Prompt nya. Bisa melalui menu
Start – All Programs – Accessories – Command Prompt ataupun menu Start – Run –
ketikkan cmd lalu tekan Enter/klik OK.
3. Sekarang tentukan tempat kita menyimpan file java tersebut, misalnya di C: \java. Artinya
kita harus masuk ke folder tersebut melalui command prompt. Umumnya saat di run, folder
default disini (command prompt) adalah c: \users \[profile anda]. Untuk pindah ke c: \java, perlu
diketikkan cd c:\java
jika misalnya anda menyimpannya di d: \tes \java maka ketikkan D: (untuk pindah drive nya) baru
cd d:\tes\java
Bila tidak ada error, maka akan muncul tampilan seperti berikut ini ( welcome.java ), jika ada
error, maka error message nya akan keluar juga ( method.java ).
Praktikum 2:
Buatlah program dibawah ini dengan nama IPtoName.java, program ini bertujuan untuk
mendapatkan nama komputer dari Alamat IP.
import java.net.*;
Praktikum 3:
Buatlah program di bawah ini, masukkan misal www.detik.com maka akan ditampilkan Alamat
IP dari www.detik.com. Masukkan host name : java.sun.com, berapakah Alamat IPnya?
import java.net.*;
import java.io.*;
public class IPFinder{
public static void main(String args[]) throws
IOException{ String host;
BufferedReader input = new BufferedReader(new
InputStreamReader(System.in)); System.out.println("Enter host name : ");
host = input.readLine();
try{
InetAddress address = InetAddress.getByName(host);
System.out.println("IP Address : " + address);
}catch(UnknownHostException e){
System.out.println("Could not find " + host);
}
}
}
Socket TCP
Java menyediakan obyek Socket dan ServerSocket untuk komunikasi soket TCP. ServerSocket
digunakan pada sisi aplikasi server, sedangkan Socket digunakan baik pada sisi aplikasi server
maupun client. Berikut adalah langkah-langkah membuat komunikasi socket di server:
10. Buatlah sebuah objek ServerSocket. Konstruktor ServerSocket memerlukan port number
(1024-65535) sebagai argumen. Sebagai contoh :
ServerSocket servSock = new ServerSocket(1234);
11. Server dalam kondisi menunggu (listen). Operasi ini pada intinya menunggu permintaan
koneksi dari sisi client.
Socket link = servSock.accept();
12. Buat input dan output stream. Stream ini digunakan untuk berkomunikasi dengan client.
Objek InputStreamReader digunakan untuk menerima respon dari client. Sedangkan
PrintWriter untuk mengirimkan data ke client.
BufferedReader in = new BufferedReader(new
InputStreamReader(link.getInputStream()));
PrintWriter out = new PrintWriter(link.getOutputStream(),true);
4. Saling berkirim dan menerima pesan. Gunakan method readLine() untuk menerima data dan
method println() untuk mengirim data.
out.println("Message " + numMessages + ":" +
message); message = in.readLine();
5. Menutup socket
Link.close();
2
Langkah-langkah komunikasi socket pada client:
1. Bangun koneksi ke server. Buatlah sebuah objek Socket, yang mempunyai konstruktor
dengan dua argumen:
• IP address server
• Port Number
Port number untuk server dan client haruslah sama.
Socket link = new Socket(InetAddress.getLocalHost(),1234);
2. Buat input dan output stream. Stream ini digunakan untuk berkomunikasi dengan client. Objek
InputStreamReader digunakan untuk menerima respon dari client. Sedangkan PrintWriter
untuk mengirimkan data ke client.
BufferedReader in = new BufferedReader(new
InputStreamReader(link.getInputStream()));
PrintWriter out = new PrintWriter(link.getOutputStream(),true);
3. Saling berkirim dan menerima pesan. Gunakan method readLine() untuk menerima data dan
method println() untuk mengirim data.
out.println("Message " + numMessages + ":" +
message); message = in.readLine();
4. Menutup socket
Link.close();
Praktikum 4:
Buatlah program Server dan Client. Program server hanya bisa terkoneksi dengan 1 client.
import java.io.*;
import java.net.*;
public class TCPEchoServer{ private
static ServerSocket servSock; private
static final int PORT = 1234 ; 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);
}
3
link = servSock.accept();
BufferedReader in = new BufferedReader(new
InputStreamReader(link.getInputStream()));
PrintWriter out = new PrintWriter(link.getOutputStream(),true);
int numMessages=0;
String message=in.readLine();
while(!message.equals("close")){
System.out.println("Message
received"); numMessages++;
out.println("Message " + numMessages + ":" +
message); message = in.readLine();
}
import java.io.*;
import java.net.*;
public class TCPEchoClient{ private
static String strHost ; private static
InetAddress host ; private static final
int PORT = 1234; public static void
main(String args[]){
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();
4
BufferedReader userEntry = new BufferedReader(new
InputStreamReader(System.in));
String message, response ;
do{
System.out.print("Enter message : ");
message = userEntry.readLine();
out.println(message);
response = in.readLine();
System.out.println("SERVER " + response);
}while(!message.equals("close"))
; }catch(IOException e){
e.printStackTrace();
}
finally{
try{
System.out.println("closing connection");
link.close();
}
catch(IOException e){
System.out.println("Unable to disconnect!");
System.exit(1);
}
}
}
}
Output program :
Jika kita jalankan TCPEchoServer pertama kali maka akan tampak seperti berikut:
Client
Masukkan pada client string seperti berikut:
5
Server
Karena ada 3 pesan dari client maka akan muncul message received sebanyak 3 kali.
6
Praktikum 5 :
Program di bawah ini server dapat menangani lebih dari 1 client.
import java.io.*;
import java.net.*;
public class MultiEchoServer{
private static ServerSocket servSock;
private static final int PORT = 1234 ;
public static void main(String args[]) throws IOException{
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{
Socket client = servSock.accept();
ClientHandler handler = new
ClientHandler(client); handler.start();
}while(true);
}
}
7
public void
run(){ try{
String received
; do{
received = in.readLine();
System.out.println(received);
out.println("ECHO : " + received);
}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()
;
}
}
}
}
import java.io.*;
import java.net.*;
public class MultiEchoClient{
String message,
response; do{
System.out.print("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{
8
if (link != null){
System.out.println("Closing down connection");
link.close();
}
}
catch(IOException e){
e.printStackTrace()
;
}
}
}
}
Output program :
Setelah client 1 mengirim 2 pesan ke server maka hasilnya tampak sebagai berikut:
9
Setelah client 2 mengirim 1 pesan ke server maka hasilnya tampak sebagai berikut:
Setelah client 3 mengirim 1 pesan ke server maka hasilnya tampak sebagai berikut:
10
Untuk protokol UDP, perbedaannya adalah socket di sisi server sama dengan socket di sisi
client dan tidak ada operasi listen pada sisi server. Kemudian saat paket data dikirimkan alamat
socket penerima harus disertakan sebagai argumen.
9. Close DatagramSocket.
dgramSocket.close();
11
DatagramSocket dgramSocket = new DatagramSocket();
7. Mengambil data dari buffer. Untuk memudahkan penanganan, maka data di ambil
sebagai string. Konstruktor String yang digunakan mempunyai 3 argumen yaitu
• Array dengan tipe byte
• Posisi awal array yang akan diambil(posisi 0)
• Jumlah byte yang akan diambil (sama dengan besar buffer)
String messageIn = new
String(inPacket.getData(),0,inPacket.getLength());
8. Close DatagramSocket.
dgramSocket.close();
Praktikum 6 :
import java.io.*;
import java.net.*;
public class UDPEchoServer{
private static final int PORT = 1234 ;
private static DatagramSocket dgramSocket ;
private static DatagramPacket inPacket, outPacket ;
private static byte[] buffer ;
public static void main(String args[]){
System.out.println("Opening Port. ... \n");
try{
dgramSocket = new DatagramSocket(PORT);
}catch(SocketException e){
System.out.println("Unable to attachto port
!"); System.exit(1);
}
run();
}
12
String messageIn, messageOut;
int numMessages=0;
do{
buffer = new byte[256] ;
inPacket = new DatagramPacket(buffer,buffer.length);
dgramSocket.receive(inPacket);
InetAddress clientAddress = inPacket.getAddress();
int clientPort = inPacket.getPort();
messageIn = new
String(inPacket.getData(),0,inPacket.getLength())
;
System.out.println("Message Received");
numMessages++;
messageOut = ("Message " + numMessages + ":" + messageIn);
outPacket = new DatagramPacket(messageOut.getBytes(),
messageOut.length(), clientAddress, clientPort);
dgramSocket.send(outPacket);
}while(true);
}
catch(IOException e){
e.printStackTrace()
;
}
finally
{
System.out.println("\nClosing Connection...");
dgramSocket.close();
}
import java.io.*;
import java.net.*;
public class UDPEchoClient{
private static InetAddress host ;
private static final int PORT = 1234 ;
private static DatagramSocket dgramSocket ; private
static DatagramPacket inPacket, outPacket ; private
static byte[] buffer ;
public static void main(String
args[]){ try{
host = InetAddress.getLocalHost();
}
catch(UnknownHostException e){
System.out.println("Host ID Not
Found"); System.exit(1);
}
run();
}
Praktikum 1:
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>
Praktikum 2
15
• Setiap user dapat mengirim atau membaca pesan.
• Setiap ada pesan yang masuk maka jumlah pesan akan ditambah(Tapi jika message box
sudah penuh maka pesan akan diabaikan). Jika pesan sudah dibaca maka jumlah pesan akan
diset 0.
• Pada saat user mengirim pesan maka ketikkan :
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
Maka akan tampak pesan-pesan yang ada pada message box.
• Jika telah selesai ketik close
Output program :
Pertama- tama pada client ketikkan Andi send, kemudian masukkan pesan yang akan dikirimkan
ke Andi. Jika sudah, maka pada server, tampilkan pesan :
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:
16
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:
17
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.
Program
import java.io.*;
import java.net.*;
import java.util.*;
18
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
//tampilkan pesan tersebut di Server
if (messageInBox == MAX)
System.out.println("INBOX FULL");
else
mailbox[messageInBox] = message ;
19
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){
e.printStackTrace()
;
}
finally{
try{
System.out.println("*********Closing
Connection****"); link.close();
}
catch(IOException e){
System.out.println("Unable to
disconnect"); System.exit(1);
}
}
}
}
import java.io.*;
import java.net.*;
import java.util.*;
public class EmailClient{
private static String strHost ; private
static InetAddress host; private static
final int PORT = 50000;
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
//kirim ke server
}
private static void doRead() throws IOException{
20
//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
}
private static void run(){
Socket link = null
; try{
link = new Socket(host, PORT);
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();
}
else if (sendRead.equals("read")){
doRead();
}
}
}
}while(!message.equals("close"))
; }catch(IOException e){
e.printStackTrace();
}
finally{
try{
System.out.println("closing connection");
link.close();
}
catch(IOException e){
System.out.println("Unable to disconnect!");
System.exit(1);
}
}
}
}
21
Praktikum 3
Pada praktikum 3, soal sama seperti praktikum 2, tetapi server dapat menangani lebih dari 1 client
(Server dapat menangani multi client). Program dikembangkan dari MultiEchoServer.java dan
MultiEchoClient.java. Skenario program adalah sebagai berikut:
• Server dapat mengenali sembarang user. Setiap user baru yang masuk akan ditambahkan
dalam sebuah object Vector dengan nama user.
Andi Budi Candra Dian Edi
Vector user = new Vector();
• Setiap user mempunyai message box pada server. Untuk menampung semua mailbox user
buatlah sebuah objek dari class Vector dengan nama mailBoxUser.
Vector mailBoxUser = new Vector();
Karena setiap user mempunyai mailbox sendiri, maka buatlah mailbox untuk setiap user yang
dibuat dari objek vector. Kemudian tambahkan pada mailBoxUser. No urut mailbox sama
dengan no urut user pada objek user.
Vector mailBoxAndi = new Vector();
mailBoxUser.add(mailBoxAndi);
• Setiap user dapat mengirim atau membaca pesan. Untuk mengirim ketik perintah “send”,
sedangkan untuk membaca ketik perintah “read”.
• Setiap ada pesan yang masuk maka jumlah pesan akan ditambah. Jika pesan sudah dibaca
maka jumlah pesan akan diset 0.
• Pertama kali pada saat program
Program di client masukkan nama user
Enter name : Andi
Program di server akan menampilkan
Andi connect.........
22
Andi akan mengirim pesan ke Budi, pesan ini akan masuk ke mailbox Budi. Tambahkan pada
pesan dengan nama user yang mengirim pesan tersebut. Sehingga pesan tersebut akan
menjadi:
pesan 1 from Andi
Output program:
Dibawah ini user Andi terhubung ke Server. Selanjutnya pilih read/send. Pada output program ini
user Andi melakukan send message ke Budi sebanyak 2 kali dan send message ke Yuli sebanyak
1 kali.
23
Selanjutnya user Budi terhubung ke Server, user Budi melakukan read, pada mailBox Budi
terdapat dua pean yang dikirim oleh user Andi.
Selanjutnya user Budi melakukan send message ke Andi sebanyak 3 kali, maka mailBox
user Andi terdapat 3 message.
24
Kembali lagi pada user Andi lakukan read, maka akan tampil 3 message.
25
Selanjutnya user Yuli terhubung dengan server. User yuli melakukan read, terdapat 1 message
pada mailboxnya.
26
Lakukan close pada server dengan memasukkan ”close”
PROGRAM
import java.io.*;
import java.net.*;
import java.util.*;
public class TugasMultiEchoServer{ private
static ServerSocket servSock; private
static final int PORT = 50000 ;
27
//untuk menampung user
private static Vector user = new Vector();
//merupakan mailbox semua user
private static Vector mailBoxUser = new Vector();
private static BufferedReader in ;
private static PrintWriter out ;
}
//untuk mengeset mailbox user menjadi kosong
//pada saat user Andi melakukan read, maka setelah itu mailboxnya manjadi
0 //message
public static void setMailBoxUser(int noUser){
//memasukkan pesan (String message) pada mailBox user tertentu (int noUser).
public static void setMailBoxUser(String message,int noUser){
}
do{
Socket link= servSock.accept();
in = new BufferedReader(new InputStreamReader(link.getInputStream()));
28
out = new PrintWriter(link.getOutputStream(),true);
//menerima dari client nama user yang akan terhubung dengan
server //yang akan menjadi masukan dari konstruktor ClientHandler
ClientHandler handler = new ClientHandler(link, name);
//lakukan pencarian user apakah user sudah tersimpan dalam objek user,
//jika belum maka tambahkan user.
handler.start();
}while(true);
}
}
//untuk membaca message pada mailbox, yang diketahui adalah nama user
public void doRead() throws IOException{
//cari dulu no indeks user pada objek user
//dapatkan jumlah message yang ada pada mailbox user
tersebut //kirimkan ke client jumlah message
//lakukan pengiriman message ke client secara berulang sejumlah
message tersebut.
//set mailbox user tersebut menjadi kosong
}
29
}
Else{
//jika user sudah ada
//menerima message dari client
//MailBox user di cetak
System.out.println("\nMailBox : " +
TugasMultiEchoServer.getUser(x));
Vector vc = TugasMultiEchoServer.getMailBoxUser(x);
System.out.println(vc);
}
}
public void run(){
try{
String message=""
; do{
//menerima masukan dari client read or
send if (message.equalsIgnoreCase("read"))
doRead();
if (message.equalsIgnoreCase("send")){
doSend();
}
}while(!message.equalsIgnoreCase("close"));
}catch(IOException e){
e.printStackTrace()
;
}
finally{
try{
if (client != null){
System.out.println("Closing down
connection"); client.close();
}
}catch(IOException e){
e.printStackTrace()
;
}
}
}
}
import java.io.*;
import java.net.*;
public class TugasMultiEchoClient{
private static InetAddress host ;
private static final int PORT =
50000; private static Socket link ;
private static BufferedReader in ;
private static PrintWriter out ;
private static BufferedReader userEntry ;
private static String name="";
//untuk megirimkan message ke server
private static void doSend() throws IOException{
//ketikkan pesan akan dikirim ke siapa
//kirim ke server
//ketikkan message yang akan dikirim
//kirim message tersebut ke server
30
}
String sendRead="" ;
Buatlah aplikasi chat multi client, program ini merupakan pengembangan dari MultiEchoServer
dan MultiEchoClient. Output pogram untuk client adalah sebagai berikut :
31
ta
tf
tfName
Pertama kali tekan button Connect supaya terhubung ke server, jika ingin mengganti no IP Server
dan no Port masukkan text field yang telah disediakan. Tentu saja, untuk no Port harus sama
dengan no Port server. Untuk default IP Server adalah localhost dan no Port adalah 1234. Jangan
lupa memasukkan nick name Anda supaya dikenali pada saat chatting.
Program Server
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
public class server {
private static ServerSocket servSock;
private static final int PORT = 1234 ;
//untuk menyimpan socket-socket yang terhubung ke server
static Vector clients = new Vector();
public static void main(String args[]) throws IOException{
System.out.println("Opening Port. ... \n");
try{
servSock = new ServerSocket(PORT);
}catch(IOException e){
System.out.println("Unable to attach to port");
32
System.exit(1);
}
do{
Socket client = servSock.accept();
cThread handler = new cThread(client);
clients.add(handler);
handler.start();
}while(true);
}
import java.io.BufferedReader;
import java.io.IOException; import
java.io.InputStreamReader; import
java.io.PrintWriter; import
java.net.Socket;
class cThread extends Thread{
private Socket client ;
private BufferedReader in ;
private PrintWriter out ;
public cThread(Socket socket){
client = socket ;
try{
in = new BufferedReader(new
InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(),true);
}catch(IOException e){
e.printStackTrace();
}
}
public void send(String message){
out.println(message);
}
public boolean equals(cThread ct){
//jika socket ct dengan socket pada class ini sama return true
// jika tidak return false ;
}
public void run(){
try{
String received
; do{
//baca dari client
//tampilkan pada Server
//message yang diterima oleh server di broadcast ke semua
client for(int i=0;i<server.clients.size();i++)
{
cThread client = (cThread) server.clients.get(i);
client.send(received);
}
}while(!received.equals("QUIT"));
}catch(IOException e){
e.printStackTrace();
}
finally{
try{
if (client != null){
System.out.println("Closing down connection");
33
client.close();
}
}catch(IOException e){
e.printStackTrace()
;
}
}
}
}
+
Program Client
public class ChatClient extends javax.swing.JFrame implements Runnable {
private InetAddress host ;
private int PORT = 1234;
private Socket link ;
private BufferedReader in ;
private PrintWriter out ;
private Thread listener;
public ChatClient() {
initComponents();
}
34
//tampilkan di TextArea
}
} catch (IOException ex) {
ex.printStackTrace ();
} finally {
listener = null;
validate ();
try {
out.close ();
} catch (Exception ex) {
ex.printStackTrace ();
}
}
}
private void tfActionPerformed(java.awt.event.ActionEvent evt) {
try{
String message="", response;
if (!message.equals("QUIT")){
// simpan message dari textfield tf ke var message
// simpan nickName user ke var name
//kirim ke server name + message
// set text field tf dengan nilai = “”
}
}catch(Exception e){
}
}
35