Home >Software >Laporan multiclient chatting client server

Laporan multiclient chatting client server

Date post:18-Dec-2014
Category:
View:170 times
Download:3 times
Share this document with a friend
Description:
 
Transcript:
  • 1. PRAKTEK PEMROGRAMAN JARINGAN KOMPUTER PROGRAM MULTICLIENT CHATTING CLIENT-SERVER DENGAN MENGGUNAKAN BAHASA PEMROGRAMAN JAVA BERBASIS GRAFIS Oleh : Nama : Tri Lestari NIM : 061130701310 Kelas : 6 CD JURUSAN TEKNIK KOMPUTER POLITEKNIK NEGERI SRIWIJAYA PALEMBANG 2014
  • 2. PROGRAM MULTICLIENT CHATTING CLIENT-SERVER DENGAN MENGGUNAKAN BAHASA PEMROGRAMAN JAVA BERBASIS GRAFIS Program ini merupakan aplikasi multiclient untuk client dan server denga berbasis grafis. Berikut listing program MultiClient Chatting Client-Server berbasis grafis (gambar). A. ChatServer.java import java.io.*; import java.net.*; import java.util.*; public class ChatServer { private static int uniqueId; private ArrayList clients; private int port; private boolean keepGoing; public ChatServer() { this.port = 9999; clients = new ArrayList(); } public void start() { keepGoing = true; try { ServerSocket serverSocket = new ServerSocket(port); while (keepGoing) {
  • 3. System.out.println("ChatServer waiting for Clients on port " + port + "."); Socket socket = serverSocket.accept(); if (!keepGoing) { break; } ChatServer.ClientThread t = new ChatServer.ClientThread(socket); clients.add(t); t.start(); send("login~" + t.username + "~" + t.username + " sedang login...~Server~n"); } try { serverSocket.close(); for (int i = 0; i < clients.size(); ++i) { ChatServer.ClientThread tc = clients.get(i); try { tc.sInput.close(); tc.sOutput.close(); tc.socket.close(); } catch (IOException ioE) { } } } catch (Exception e) { System.out.println("Exception closing the server and clients: " + e); } } catch (IOException e) {
  • 4. String msg = "Exception on new ServerSocket: " + e + "n"; System.out.println(msg); } } private synchronized void send(String message) { for (int i = clients.size(); --i >= 0;) { ChatServer.ClientThread ct = clients.get(i); if (!ct.writeMsg(message)) { clients.remove(i); System.out.println("Disconnected Client " + ct.username + " removed from list."); } } } private String getClients() { String s = ""; for (ClientThread clientThread : clients) { s += clientThread.username + ":"; } s += "---"; System.out.println(s); return s; } private synchronized void remove(int id) { for (int i = 0; i < clients.size(); ++i) {
  • 5. ChatServer.ClientThread ct = clients.get(i); if (ct.id == id) { clients.remove(i); return; } } } public static void main(String[] args) { ChatServer server = new ChatServer(); server.start(); } private class ClientThread extends Thread { private Socket socket; private ObjectInputStream sInput; private ObjectOutputStream sOutput; private int id; private String username; public ClientThread(Socket socket) { id = ++uniqueId; this.socket = socket; System.out.println("Menciptakan Object Input/Output Streams"); try { sOutput = new ObjectOutputStream(socket.getOutputStream());
  • 6. sInput = new ObjectInputStream(socket.getInputStream()); String message = (String) sInput.readObject(); username = message.split("~")[1]; System.out.println(username + " masuk."); } catch (IOException e) { System.out.println("Exception creating new Input/output Streams: " + e); } catch (ClassNotFoundException e) { } } @Override public void run() { boolean keepGoing = true; while (keepGoing) { String message; try { message = sInput.readObject().toString(); } catch (IOException e) { System.out.println(username + " Exception reading Streams: " + e); break; } catch (ClassNotFoundException e2) { break; }
  • 7. String type = message.split("~")[0]; String pengirim = message.split("~")[1]; String text = message.split("~")[2]; String kepada = message.split("~")[3]; String response; switch (type) { case "postText": response = "recieveText~" + pengirim + "~" + text + "~" + kepada + "~n"; send(response); break; case "postPrivateText": response = "recievePrivateText~" + pengirim + "~" + text + "~" + kepada + "~n"; send(response); break; case "login": response = "login~" + pengirim + "~" + text + "~" + kepada + "~n"; send(response); break; case "logout": response = "logout~" + pengirim + "~" + text + "~" + kepada + "~n"; send(response); break; case "list":
  • 8. response = "list~server~" + getClients() + "~ ~ ~ ~ ~n"; send(response); break; } } remove(id); close(); } private void close() { try { if (sOutput != null) { sOutput.close(); } } catch (Exception e) { } try { if (sInput != null) { sInput.close(); } } catch (Exception e) { } try { if (socket != null) { socket.close(); } } catch (Exception e) { } }
  • 9. private boolean writeMsg(String msg) { if (!socket.isConnected()) { close(); return false; } try { sOutput.writeObject(msg); } catch (IOException e) { System.out.println("Error sending message to " + username); System.out.println(e.toString()); } return true; } } } B. ChatClient.java import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.table.DefaultTableModel;
  • 10. public class ChatClient extends javax.swing.JFrame { /** * Creates new form ChatClient */ private ObjectInputStream input; private ObjectOutputStream output; private Socket socket; private String server, username; private int port; private List clients; public ChatClient() { clients = new ArrayList(); initComponents(); } public boolean start() { try { socket = new Socket(server, port); } catch (Exception ec) { System.out.println("Error connectiong to server:" + ec); return false; } String msg = "Connection accepted " + socket.getInetAddress() + ":" + socket.getPort(); System.out.println(msg);
  • 11. try { input = new ObjectInputStream(socket.getInputStream()); output = new ObjectOutputStream(socket.getOutputStream()); } catch (IOException eIO) { System.out.println("Exception creating new Input/output Streams: " + eIO); return false; } new ChatClient.ListenFromServer().start(); try { output.writeObject("login~" + username + "~" + username + " sedang login...~server~n"); output.writeObject("list~" + username + "~" + username + " sedang login...~server~n"); } catch (IOException eIO) { System.out.println("Exception doing login : " + eIO); disconnect(); return false; } return true; } private void disconnect() { try {
  • 12. // TODO add your handling code here: output.writeObject("logout~" + username + "~" + username + " sudah logout...~Server~n"); } catch (IOException ex) { //Logger.getLogger(ChatClient.class.getName()).log(Leve l.SEVERE, null, ex); } try { if (input != null) { input.close(); } } catch (Exception e) { } try { if (output != null) { output.close(); } } catch (Exception e) { } try { if (socket != null) { socket.close(); } } catch (Exception e) { } } /**
  • 13. * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); viewTextArea = new javax.swing.JTextArea(); jScrollPane2 = new javax.swing.JScrollPane(); clientTable = new javax.swing.JTable(); postTextField = new javax.swing.JTextField(); kirimButton = new javax.swing.JButton(); lbljpg = new javax.swing.JLabel(new ImageIcon("E:/rara.jpg")); jLabel2 = new javax.swing.JLabel(); serverTextField = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); portTextField = new javax.swing.JTextField(); masukButton = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); usernameTextField = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.EX IT_ON_CLOSE);
  • 14. viewTextArea.setEditable(false); viewTextArea.setColumns(20); viewTextArea.setLineWrap(true); viewTextArea.setRows(5); viewTextArea.setFocusable(false); jScrollPane1.setViewportView(viewTextArea); jScrollPane2.setViewportView(clientTable); postTextField.addActionListener(new java.awt.event.ActionListener() { public
Embed Size (px)
Recommended