Java Client Server Sederhana

Pemrograman Client Server merupakan pemrograman yang melibatkan teknologi Networking. Kenapa? karena kita harus melakukan pemrograman untuk Port, Socket. Bagi para programmer yang sudah terbiasa dengan pemrograman socket, mungkin sudah tahu betul tingkat kesulitan dan keribetan yang dialami. Nah, Java sendiri sudah menyediakan class object yang bisa digunakan untuk mengatasi keribetan tersebut. Kita bisa menggunakan object class yang terlebih dahulu harus kita import. Dengan cara import java.net.*. OK. Kita Mulai saja. Untuk melakukan pemrograman client-Server di Java, kita terlebih dahulu harus mengetahui konsep kerja atau frameworknya. Pusing? tidak perlu lah..... Kita akan bahas di sini: Untuk lebih jelasnya kita akan membuat program chatting sederhana dengan menggunakan pemrograman Socket Client-Server ini. Beberapa hal yang harus dimemngerti adalah: 1. Kita harus membuat 2 buah program, satu program untuk berlaku sebagai Server, dan satu program lagi sebagai Client 2. Server bertugas menyediakan service/layanan kepada client 3. Client bertugas me-request service ke server, kemudian server akan me-response nya ke client 4. Server pertama kali akan men-scan port mana yang masih kosong dan bisa dipakai untuk melakukan session 5. Setelah Port ditemukan, maka port tersebut akan dibuka/open sehingga bersifat Open Connection. 6. Setelah itu Server akan membuka layanan dan menunggu request dari client 7. Client pertama tama harus membuka port yang sama dengan port yang dibuka oleh server 8. Setelah port terbuka, maka client akan mengirimkan request ke server 9. Client akan menerima response dari server 10. Begitulah akan tercipta sebah session dimana client dan server bisa saling berkomunikasi. Session akan berhenti kalau salah satu pihak (Client atau Server) menghentikan Session. Nah itu dia. sudah dijelaskan kira-kira kerjanya client dan Server. Tinggal kita akan lihat codingnya seperti apa. Pertama, kita akan membuat dulu program untuk Server. Seperti di bawah ini:
1:  import java.net.*;  
2:  import java.io.*;  
3:  public class ChatServer  
4:  { private Socket     socket  = null;  
5:    private ServerSocket  server  = null;  
6:    private DataInputStream streamIn = null;  
7:    private DataInputStream console  = null;  
8:     private DataOutputStream streamOut = null;  
9:    public ChatServer(int port)  
10:    { try  
11:     { System.out.println("Binding to port " + port + ", please wait ...");  
12:       server = new ServerSocket(port);  
13:       System.out.println("Server started: " + server);  
14:       System.out.println("Waiting for a client ...");  
15:       socket = server.accept();  
16:       System.out.println("Client accepted: " + socket);  
17:       open();  
18:       boolean done = false;  
19:       while (!done)  
20:       { try  
21:        { String line = streamIn.readUTF();  
22:          System.out.println(line);  
23:          //done = line.equals(".bye");  
24:          //mbales  
25:          line=console.readLine();  
26:          streamOut.writeUTF(line);  
27:          streamOut.flush();  
28:          done = line.equals(".bye");  
29:        }  
30:        catch(IOException ioe)  
31:        { done = true;  
32:        }  
33:       }  
34:       close();  
35:     }  
36:     catch(IOException ioe)  
37:     { System.out.println(ioe);  
38:     }  
39:    }  
40:    public void open() throws IOException  
41:    { streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));  
42:    //utk mbales  
43:    console  = new DataInputStream(System.in);  
44:       streamOut = new DataOutputStream(socket.getOutputStream());  
45:    }  
46:    public void close() throws IOException  
47:    { if (socket != null)  socket.close();  
48:     if (streamIn != null) streamIn.close();  
49:    }  
50:    public static void main(String args[])  
51:    { ChatServer server = null;  
52:     if (args.length != 1)  
53:       System.out.println("Usage: java ChatServer port");  
54:     else  
55:       server = new ChatServer(Integer.parseInt(args[0]));  
56:    }  
57:  }  
Simpan file di atas dengan nama chatServer.java. Dengan server = new ServerSocket(port); maka server akan menscan port yang masih kosong.

40:    public void open() throws IOException  
41:    { streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));  
42:    //utk mbales  
43:    console  = new DataInputStream(System.in);  
44:       streamOut = new DataOutputStream(socket.getOutputStream());  
45:    }  
46:    public void close() throws IOException  
47:    { if (socket != null)  socket.close();  
48:     if (streamIn != null) streamIn.close();  
49:    }  
50:    public static void main(String args[])  
51:    { ChatServer server = null;  
52:     if (args.length != 1)  
53:       System.out.println("Usage: java ChatServer port");  
54:     else  
55:       server = new ChatServer(Integer.parseInt(args[0]));  
56:    }  
57:  }  
Setelah port ketemu, maka port akan dibuka dnegan method seperti di atas. Method stop() berfungsi untuk menghentikan session kalau client atau server sudah mengetikkan kata ".bye" Untuk Program di Client nya seperti ini:
1:  import java.net.*;  
2:  import java.io.*;  
3:  public class ChatClient  
4:  { private Socket socket       = null;  
5:    private DataInputStream console  = null;  
6:    private DataOutputStream streamOut = null;  
7:    private DataInputStream streamIn = null;  
8:    public ChatClient(String serverName, int serverPort)  
9:    { System.out.println("Establishing connection. Please wait ...");  
10:     try  
11:     { socket = new Socket(serverName, serverPort);  
12:       System.out.println("Connected: " + socket);  
13:       start();  
14:     }  
15:     catch(UnknownHostException uhe)  
16:     { System.out.println("Host unknown: " + uhe.getMessage());  
17:     }  
18:     catch(IOException ioe)  
19:     { System.out.println("Unexpected exception: " + ioe.getMessage());  
20:     }  
21:     String line = "";  
22:     String client="Client> ";  
23:     String server="Server> ";  
24:     while (!line.equals(".bye"))  
25:     { try  
26:       { line = console.readLine();  
27:        streamOut.writeUTF(client+line);  
28:        streamOut.flush();  
29:        line = streamIn.readUTF();  
30:        System.out.println(server+line);  
31:       }  
32:       catch(IOException ioe)  
33:       { System.out.println("Sending error: " + ioe.getMessage());  
34:       }  
35:     }  
36:    }  
37:    public void start() throws IOException  
38:    { console  = new DataInputStream(System.in);  
39:     streamOut = new DataOutputStream(socket.getOutputStream());  
40:     streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));  
41:    }  
42:    public void stop()  
43:    { try  
44:     { if (console  != null) console.close();  
45:       if (streamOut != null) streamOut.close();  
46:       if (socket  != null) socket.close();  
47:     }  
48:     catch(IOException ioe)  
49:     { System.out.println("Error closing ...");  
50:     }  
51:    }  
52:    public static void main(String args[])  
53:    { ChatClient client = null;  
54:     if (args.length != 2)  
55:       System.out.println("Usage: java ChatClient host port");  
56:     else  
57:       client = new ChatClient(args[0], Integer.parseInt(args[1]));  
58:    }  
59:  }  
Simpan program tersebut dengan nama chatCleint.java. Nah untuk menjalankan programnya, di console kita ketikkan:
c:/java chatServer [port]
contoh, kita buka port 9901 (default port java):
c:/java chatServer 9901
Buka console satu lagi dan ketikkan:
c:/java chatClient  [serverName] [port]
contoh, kita buka server localhost dan port 9901(harus sama dengan port server):
c:/java chatClient localhost 9901
maka setelah di jalankan, kita bisa saling chatting antara client dan server. Chatting akan berakhir kalau salah satu menuliskan ".bye". Seperti gambar di bawah ini:
Selamat Mencoba. Semoga Bermanfaat.

2 komentar:

  1. Mas ketika run di CMD ada tulisan gini? " Error: Could not find or load main class chatServer "

    Pic: http://prntscr.com/4xmx69

    BalasHapus
  2. kalo ipnya yang di inputkan bisa gan?

    BalasHapus