menggunakan tcp socket · ¾langkah dalam langkah dalam mensetmenset proses proses serverserver ......
TRANSCRIPT
MENGGUNAKANMENGGUNAKANTCP TCP SOCKETSOCKET
Oleh: M. Ghazali a.k.a. ghaNOZ 2480
http://ghanoz2480.wordpress.com
09/03/2009 2
AgendaAgenda
PendahuluanPendahuluanSekilas Mengenai TCP SocketSekilas Mengenai TCP Socket
Membuat Program ServerMembuat Program ServerContoh Program ServerContoh Program Server
Membuat Program ClientMembuat Program ClientContoh Program ClientContoh Program Client
DemoDemoCatatanCatatan
ReferensiReferensi
PendahuluanPendahuluan
09/03/2009 4
PendahuluanPendahuluan
Apa yang telah saya pelajari?Apa yang telah saya pelajari?SedikitSedikit mengenaimengenai TCP SocketTCP SocketLangkah dalam Langkah dalam mensetmenset proses proses serverserverLangkah dalam Langkah dalam mensetmenset proses proses clientclientMembuat program Membuat program clientclient//serverserver
Sekilas Mengenai Sekilas Mengenai TCP SocketTCP Socket
09/03/2009 6
Sekilas Mengenai TCP SocketSekilas Mengenai TCP Socket
HubunganHubungan komunikasikomunikasi yang yang dibuatdibuat melaluimelalui TCP TCP socketsocket merupakanmerupakan hubunganhubungan connectionconnection--orientedoriented..HubunganHubungan antaraantara serverserver dandan clientclient tetaptetap terbukaterbukaselamaselama dialogdialogDalamDalam keadaankeadaan normal normal hanyahanya dapatdapat diputusdiputusketikaketika salahsalah satusatu endend--pointpoint (client (client atauatau server) server) menghentikanmenghentikan exchangeexchange melaluimelalui protokolprotokol yang yang disetujuidisetujui
MembuatMembuat Program Program ServerServer
09/03/2009 8
MembuatMembuat Program ServerProgram Server
LangkahLangkah yang yang dibutuhkandibutuhkan dalamdalam mensetmensetprosesproses serverserver::
1.1. MembuatMembuat objectobject ServerSocketServerSocket
2.2. MenempatkanMenempatkan server server dalamdalam keadaankeadaan menunggumenunggu3.3. MensetMenset input input dandan output streamoutput stream4.4. MengirimMengirim dandan menerimamenerima datadata5.5. MengakhiriMengakhiri hubunganhubungan ((setelahsetelah penyelesaianpenyelesaian dialog)dialog)
09/03/2009 9
MembuatMembuat Program ServerProgram Server((LangkahLangkah keke--11))
MembuatMembuat objectobject ServerSocketServerSocket::Constructor ServerSocket membutuhkannomor port antara 1024-65535 (non-reserved) sebagaiargumen. Sebagai contoh:
ServerSocketServerSocket servSockservSock = new = new ServerSocket(2480);ServerSocket(2480);
Dengan begitu, server akan mendengarkan koneksidari client pada port 2480.
09/03/2009 10
MembuatMembuat Program ServerProgram Server((LangkahLangkah keke--22))
MenempatkanMenempatkan serverserver dalamdalam keadaankeadaan menunggumenunggu::Server Server menunggumenunggu untukuntuk jangkajangka waktuwaktu tidaktidakterbatasterbatas ((‘‘blocksblocks’’) ) untukuntuk menghubungkanmenghubungkan clientclient. . Dilakukan dengan memanggil method accept dariclass ServerSocket dimana akan me-return objectSocket ketika hubungan dibuat.Contoh:Socket link = Socket link = servSock.acceptservSock.accept();();
09/03/2009 11
MembuatMembuat Program ServerProgram Server((LangkahLangkah keke--33))
MenggunakanMenggunakan methodmethod getInputStreamgetInputStreamdandan getOutputStreamgetOutputStream daridari class class SocketSocket
Method Method tersebuttersebut digunakandigunakan untukuntuk mengambilmengambilreferencereference keke streamstream yang yang berhubunganberhubungan dengandengansocketsocket yang yang didi--returnedreturned padapada langkahlangkah keke--22
09/03/2009 12
MembuatMembuat Program ServerProgram Server((LangkahLangkah keke--33))
MensetMenset input streaminput stream ::Untuk aplikasi non-GUI, kita dapat membungkusobject InputStream (yang di-returned oleh methodgetInputStream) dalam object Scanner, untuk memperoleh masukan string-oriented.Sebagai contoh:Scanner input = new Scanner input = new Scanner(link.getInputStreamScanner(link.getInputStream());());
09/03/2009 13
MembuatMembuat Program ServerProgram Server((LangkahLangkah keke--33))
Menset output stream :Membungkus (wrap) object OutputStream (yang di-returned oleh method getOutputStream) dalamobject PrintWriterSebagai contoh:PrintWriterPrintWriter output = new output = new PrintWriter(link.getOutputStream(),PrintWriter(link.getOutputStream(),truetrue););
Dengan argumen kedua (true) akan menyebabkanoutput buffer untuk di-flush setiap kali printlndipanggil
09/03/2009 14
MembuatMembuat Program ServerProgram Server((LangkahLangkah keke--44))
Mengirim dan menerima data:Menerima data dengan menggunakan method nextLine (class Scanner)Mengirim data dengan menggunakan method println (class PrintWriter)Sebagai contoh:String String messagemessage = = input.nextLineinput.nextLine();();
ooutput.printlnutput.println((““echo backecho back...");...");
09/03/2009 15
MembuatMembuat Program ServerProgram Server((LangkahLangkah keke--55))
MengakhiriMengakhiri hubunganhubungan ((setelahsetelah penyelesaianpenyelesaiandialog)dialog) :
Menggunakan method close (class Socket)Sebagai contoh:link.closelink.close();();
Contoh Program Contoh Program ServerServer
09/03/2009 17
ContohContoh Program ServerProgram Serverimport import java.iojava.io.*;.*;import import java.netjava.net.*;.*;import import java.utiljava.util.*;.*;
public class TCPEchoServer1{public class TCPEchoServer1{private static private static ServerSocketServerSocket servSocketservSocket;;private static final private static final intint PORT = 2480;PORT = 2480;
public static void public static void main(Stringmain(String argsargs[]){[]){System.out.println("OpeningSystem.out.println("Opening port...");port...");System.out.println("AwaitingSystem.out.println("Awaiting for data...");for data...");
try{try{// STEP1: Create // STEP1: Create ServerSocketServerSocket objectobjectservSocketservSocket = new = new ServerSocket(PORTServerSocket(PORT););
}}
09/03/2009 18
ContohContoh Program ServerProgram Servercatch(IOExceptioncatch(IOException ioExioEx){){
System.out.println("UnableSystem.out.println("Unable to attach to to attach to port!");port!");
System.exit(1);System.exit(1);}}
do{do{handleClienthandleClient();();
}}while(truewhile(true););
}}
private static void private static void handleClienthandleClient(){(){Socket link = null; // STEP 2Socket link = null; // STEP 2
09/03/2009 19
ContohContoh Program ServerProgram Servertry{try{
link = link = servSocket.acceptservSocket.accept(); // STEP 2(); // STEP 2
Scanner input = new Scanner input = new Scanner(link.getInputStreamScanner(link.getInputStream()); // STEP 3 ()); // STEP 3
PrintWriterPrintWriter output = new output = new PrintWriter(link.getOutputStreamPrintWriter(link.getOutputStream(), true); // STEP 3(), true); // STEP 3
intint numMessagesnumMessages = 0;= 0;String message = "";String message = "";do{do{
message = message = input.nextLineinput.nextLine(); (); // STEP 4// STEP 4
09/03/2009 20
ContohContoh Program ServerProgram Serverif(!message.equals("QUITif(!message.equals("QUIT")){")){
System.out.println("MessageSystem.out.println("Message received received --> " + message); > " + message);
numMessagesnumMessages++;++;output.println("Messageoutput.println("Message " + " +
numMessagesnumMessages + ": " + message);+ ": " + message);}}
}}while(!message.equals("QUITwhile(!message.equals("QUIT")); "));
output.println(numMessagesoutput.println(numMessages + " messages + " messages received."); // STEP 4received."); // STEP 4
}}catch(IOExceptioncatch(IOException ioExioEx){){
ioEx.printStackTraceioEx.printStackTrace();();}}
09/03/2009 21
ContohContoh Program ServerProgram Serverfinally{finally{
try{ try{ System.out.println("System.out.println("\\nn* Closing * Closing
connection... *");connection... *");link.closelink.close(); // STEP 5(); // STEP 5System.out.println("WaitingSystem.out.println("Waiting new new
connection...");connection...");}}catch(IOExceptioncatch(IOException ioExioEx){){
System.out.println("UnableSystem.out.println("Unable to to disconnect");disconnect");
System.exit(1);System.exit(1);}}
}}}}
}}
MembuatMembuat Program Program ClientClient
09/03/2009 23
MembuatMembuat Program ClientProgram Client
Dalam membuat program client terdapat 5 langkah:
1. Membuat sebuah koneksi ke server2. Menset input dan output stream3. Mengirim dan menerima data4. Mengakhiri hubungan (setelah penyelesaian dialog)
09/03/2009 24
MembuatMembuat Program Program ClientClient((LangkahLangkah keke--11))
Membuat koneksi ke server :Kita buat objek Socket, memberikan constructor-nya dengan dua argumen berikut:
1. IP address dari server2. Nomor port yang digunakan (pada server). Dan tentunya nomor port
yang digunakan harus sama antara client dengan server.
Sebagai contoh:Socket link = new
Socket(InetAddress.getByName(“ghanoz2480”),1234);
09/03/2009 25
MembuatMembuat Program Program ClientClient((LangkahLangkah keke--22))
Menset input dan output stream:Langkah ini sama saja dengan langkah ke-3 dalam membuat program server (Anda bisa melihat kembali pada slide 11-13)
09/03/2009 26
MembuatMembuat Program Program ClientClient((LangkahLangkah keke--33))
MengirimMengirim dandan menerimamenerima data:data:Objek Objek ScannerScanner pada pada clientclient akan menerima pesan yang akan menerima pesan yang dikirim oleh objek dikirim oleh objek PrintWriterPrintWriter pada pada serverserver, sementara , sementara objek objek PrintWriterPrintWriter pada pada clientclient akan mengirim pesan akan mengirim pesan yang akan diterima oleh objek yang akan diterima oleh objek ScannerScanner pada pada serverserver(dengan menggunakan (dengan menggunakan methodmethod nextLinenextLine dan dan printlnprintln).).Sebagai contoh:Sebagai contoh:String String messagemessage = = input.nextLineinput.nextLine();();
ooutput.printlnutput.println((messagemessage););
09/03/2009 27
MembuatMembuat Program Program ClientClient((LangkahLangkah keke--44))
MengakhiriMengakhiri hubunganhubungan ((setelahsetelah penyelesaianpenyelesaiandialog)dialog):
Menggunakan method close (class Socket)Sebagai contoh:link.closelink.close();();
Contoh Program Contoh Program ClientClient
09/03/2009 29
ContohContoh Program Program ClientClientimport import java.iojava.io.*;.*;import import java.netjava.net.*;.*;import import java.utiljava.util.*;.*;
public class public class TCPEchoClientTCPEchoClient{{private static private static InetAddressInetAddress host;host;private static final private static final intint PORT = 2480;PORT = 2480;
public static void public static void main(Stringmain(String argsargs[]){[]){try{try{
host = host = InetAddress.getLocalHostInetAddress.getLocalHost();();}}
catch(UnknownHostExceptioncatch(UnknownHostException uhExuhEx){){System.out.println("HostSystem.out.println("Host ID not found!");ID not found!");System.exit(1);System.exit(1);
}}
09/03/2009 30
ContohContoh Program Program ClientClientaccessServeraccessServer();();
}}
private static void private static void accessServeraccessServer(){(){Socket link = null; // STEP 1Socket link = null; // STEP 1
try{try{link = new link = new Socket(hostSocket(host, PORT); // STEP 1, PORT); // STEP 1
Scanner input = new Scanner input = new Scanner(link.getInputStreamScanner(link.getInputStream()); // STEP 2 ()); // STEP 2
PrintWriterPrintWriter output = new output = new PrintWriter(link.getOutputStreamPrintWriter(link.getOutputStream(), true); // STEP 2(), true); // STEP 2
09/03/2009 31
ContohContoh Program Program ClientClient// Set up stream for keyboard entry...// Set up stream for keyboard entry...
Scanner Scanner userEntryuserEntry = new = new Scanner(System.inScanner(System.in););
String message, response;String message, response;
do{do{System.out.print("ClientSystem.out.print("Client> Enter message: ");> Enter message: ");message = message = userEntry.nextLineuserEntry.nextLine();();output.println(messageoutput.println(message); );
// STEP 3// STEP 3
if(!message.equals("QUITif(!message.equals("QUIT")){")){response = response = input.nextLineinput.nextLine(); ();
// STEP 3// STEP 3System.out.println("System.out.println("\\nServernServer> " + > " +
response);response);}}
}}while(!message.equals("QUITwhile(!message.equals("QUIT"));"));
09/03/2009 32
ContohContoh Program Program ClientClientresponse = response = input.nextLineinput.nextLine(); // STEP 3(); // STEP 3
System.out.println(responseSystem.out.println(response););}}catch(IOExceptioncatch(IOException ioExioEx){){
ioEx.printStackTraceioEx.printStackTrace();();}}finally{finally{
try{try{System.out.println("System.out.println("\\nn* Closing connection... * Closing connection...
*");*");link.closelink.close(); ();
// STEP 4// STEP 4}}catch(IOExceptioncatch(IOException ioExioEx){){
System.out.println("UnableSystem.out.println("Unable to disconnect!");to disconnect!");System.exit(1);System.exit(1);
} } }}
}}}}
DemoDemo
Demo Demo (localhost)(localhost)
09/03/2009 35
Demo Demo (localhost)(localhost)
Sebelum mencoba program antar komputer, Sebelum mencoba program antar komputer, kita coba dulu secara kita coba dulu secara localhostlocalhostBuka dua Buka dua commandcommand, satu untuk menjalankan , satu untuk menjalankan program program serverserver, satu lagi untuk menjalankan , satu lagi untuk menjalankan program program clientclient
09/03/2009 36
Demo Demo (localhost)(localhost)
Jalankan program Jalankan program serverserver (TCPEchoServer) terlebih (TCPEchoServer) terlebih dahulu karena jika tidak saat program dahulu karena jika tidak saat program clientclient(TCPEchoClient) dijalankan akan mengalami (TCPEchoClient) dijalankan akan mengalami crashcrashSetelah dijalankan Setelah dijalankan serverserver akan menunggu koneksi dari akan menunggu koneksi dari clientclient
09/03/2009 37
Demo Demo (localhost)(localhost)
Jalankan program Jalankan program clientclientClientClient siap untuk mengirim pesansiap untuk mengirim pesan
09/03/2009 38
Demo Demo (localhost)(localhost)
Mengirim pesan (Mengirim pesan (““HalloHallo””) ke server) ke serverServer mengServer meng--echoecho pesan yang kita kirim tersebutpesan yang kita kirim tersebut
09/03/2009 39
Demo Demo (localhost)(localhost)
ServerServer menampilkan pesan (menampilkan pesan (““HalloHallo””) yang dikirim oleh ) yang dikirim oleh clientclient
09/03/2009 40
Demo Demo (localhost)(localhost)
Client memutuskan koneksi dari serverClient memutuskan koneksi dari serverServer menunggu koneksi baru dari clientServer menunggu koneksi baru dari client
Demo Demo (antar komputer)(antar komputer)
09/03/2009 42
Demo Demo (antar komputer)(antar komputer)
Saya akan menunjukkan bagaimana jika programSaya akan menunjukkan bagaimana jika program--program program tersebut dijalankan antar komputertersebut dijalankan antar komputerDilakukan dalam jaringan lokal sayaDilakukan dalam jaringan lokal sayaPada program client ada statement yang perlu dirubah:Pada program client ada statement yang perlu dirubah:host = InetAddress.getLocalHost();host = InetAddress.getLocalHost();
Menjadi:Menjadi:host = InetAddress.getByName("ghanoz2480");host = InetAddress.getByName("ghanoz2480");
Note:Note:dengan argumen nama host dimana program server beradadengan argumen nama host dimana program server berada
09/03/2009 43
Demo Demo (antar komputer)(antar komputer)
Pada komputer yang menjalankan program Pada komputer yang menjalankan program serverserver
09/03/2009 44
Demo Demo (antar komputer)(antar komputer)
Pada komputer yang menjalankan program Pada komputer yang menjalankan program clientclient
CatatanCatatan
09/03/2009 46
CatatanCatatanContoh program yang saya tunjukkan tersebut merupakan Contoh program yang saya tunjukkan tersebut merupakan contoh program dari buku contoh program dari buku ““An Introduction to Network Programming with Java”” yang ditulis oleh Jan Graba.yang ditulis oleh Jan Graba.Pada contoh program (TCPEchoServer.java dan Pada contoh program (TCPEchoServer.java dan TCPEchoClient.java) tersebut saya lakukan sedikit perubahan TCPEchoClient.java) tersebut saya lakukan sedikit perubahan (yang lebih baik tentunya) pada beberapa bagian.(yang lebih baik tentunya) pada beberapa bagian.Bila Anda ingin melihat contoh program (dari buku) aslinya, Bila Anda ingin melihat contoh program (dari buku) aslinya, saya sertakan pula dengan nama (TCPEchoServerA.java dan saya sertakan pula dengan nama (TCPEchoServerA.java dan TCPEchoClientA.java)TCPEchoClientA.java)Demo program tersebut saya lakukan secara Demo program tersebut saya lakukan secara localhostlocalhostDemo program tersebut juga saya lakukan dengan Demo program tersebut juga saya lakukan dengan menggunakan dua komputer.menggunakan dua komputer.Program tersebut hanya bisa menangani satu koneksi saja, jika Program tersebut hanya bisa menangani satu koneksi saja, jika ada client lain mencoba untuk membuat hubungan, client ada client lain mencoba untuk membuat hubungan, client tersebut harus menunggutersebut harus menunggu
ReferensiReferensi
09/03/2009 48
ReferensiReferensi1. Jan Graba, “An Introduction to Network Programming with
Java”, Springer, 2007.2. “JDK6 Documentation”,
http://java.sun.com/javase/6/download.jsp#docs
09/03/2009 49
Kritik, saran, dan tanggapan silahkan kirim email ke:Kritik, saran, dan tanggapan silahkan kirim email ke:[email protected]@widyatama.ac.id
[email protected]@gmail.com
Terima KasihTerima Kasih
TheONEmAn2480