Guest User

Untitled

a guest
Apr 25th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.73 KB | None | 0 0
  1. package multiChatApp;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.net.Socket;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.logging.Level;
  10. import java.util.logging.Logger;
  11. import javax.swing.table.DefaultTableModel;
  12.  
  13. /**
  14. *
  15. * @author sgnzst
  16. */
  17. @SuppressWarnings("serial")
  18. public class ChatClient extends javax.swing.JFrame {
  19.  
  20. private ObjectInputStream input;
  21. private ObjectOutputStream output;
  22. private Socket socket;
  23. private String server, username;
  24. private int port;
  25. private List<String> clients;
  26.  
  27. public ChatClient() {
  28. clients = new ArrayList<>();
  29. initComponents();
  30. }
  31.  
  32. public boolean start() {
  33. try {
  34. socket = new Socket(server, port);
  35. } catch (Exception ec) {
  36. System.out.println("Error connectiong to server:" + ec);
  37. return false;
  38. }
  39.  
  40. String msg = "Connection accepted " + socket.getInetAddress() + ":" + socket.getPort();
  41. System.out.println(msg);
  42.  
  43. try {
  44. input = new ObjectInputStream(socket.getInputStream());
  45. output = new ObjectOutputStream(socket.getOutputStream());
  46. } catch (IOException eIO) {
  47. System.out.println("Exception creating new Input/output Streams: " + eIO);
  48. return false;
  49. }
  50.  
  51. new ChatClient.ListenFromServer().start();
  52.  
  53. try {
  54. output.writeObject("login~" + username + "~" + username + " sedang login...~server~\n");
  55. output.writeObject("list~" + username + "~" + username + " sedang login...~server~\n");
  56.  
  57. } catch (IOException eIO) {
  58. System.out.println("Exception doing login : " + eIO);
  59. disconnect();
  60. return false;
  61. }
  62.  
  63. return true;
  64. }
  65.  
  66. private void disconnect() {
  67. try {
  68. output.writeObject("logout~" + username + "~" + username + " sudah logout...~Server~\n");
  69. } catch (IOException ex) {
  70. Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);
  71. }
  72.  
  73. try {
  74. if (input != null) {
  75. input.close();
  76. }
  77. } catch (Exception e) {
  78. }
  79. try {
  80. if (output != null) {
  81. output.close();
  82. }
  83. } catch (Exception e) {
  84. }
  85. try {
  86. if (socket != null) {
  87. socket.close();
  88. }
  89. } catch (Exception e) {
  90. }
  91. }
  92.  
  93. private void initComponents() {
  94. jScrollPane1 = new javax.swing.JScrollPane();
  95. viewTextArea = new javax.swing.JTextArea();
  96. jScrollPane2 = new javax.swing.JScrollPane();
  97. clientTable = new javax.swing.JTable();
  98. postTextField = new javax.swing.JTextField();
  99. kirimButton = new javax.swing.JButton();
  100. jLabel2 = new javax.swing.JLabel();
  101. serverTextField = new javax.swing.JTextField();
  102. jLabel3 = new javax.swing.JLabel();
  103. portTextField = new javax.swing.JTextField();
  104. masukButton = new javax.swing.JButton();
  105. jLabel4 = new javax.swing.JLabel();
  106. usernameTextField = new javax.swing.JTextField();
  107.  
  108. setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  109.  
  110. viewTextArea.setEditable(false);
  111. viewTextArea.setColumns(20);
  112. viewTextArea.setLineWrap(true);
  113. viewTextArea.setRows(5);
  114. viewTextArea.setFocusable(false);
  115. jScrollPane1.setViewportView(viewTextArea);
  116.  
  117. jScrollPane2.setViewportView(clientTable);
  118.  
  119. postTextField.addActionListener(new java.awt.event.ActionListener() {
  120. public void actionPerformed(java.awt.event.ActionEvent evt) {
  121. postTextFieldActionPerformed(evt);
  122. }
  123. });
  124.  
  125. kirimButton.setText("Kirim");
  126. kirimButton.addActionListener(new java.awt.event.ActionListener() {
  127. public void actionPerformed(java.awt.event.ActionEvent evt) {
  128. kirimButtonActionPerformed(evt);
  129. }
  130. });
  131.  
  132. jLabel2.setText("Server");
  133.  
  134. serverTextField.setText("127.0.0.1");
  135.  
  136. jLabel3.setText("Port");
  137.  
  138. portTextField.setText("9999");
  139.  
  140. masukButton.setText("Masuk");
  141. masukButton.addActionListener(new java.awt.event.ActionListener() {
  142. public void actionPerformed(java.awt.event.ActionEvent evt) {
  143. masukButtonActionPerformed(evt);
  144. }
  145. });
  146.  
  147. jLabel4.setText("Username");
  148.  
  149. usernameTextField.setText("animous");
  150.  
  151. javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  152. getContentPane().setLayout(layout);
  153. layout.setHorizontalGroup(
  154. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  155. .addGroup(layout.createSequentialGroup()
  156. .addContainerGap()
  157. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  158. .addGroup(layout.createSequentialGroup()
  159. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  160. .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  161. .addComponent(postTextField)
  162. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  163. .addComponent(kirimButton))
  164. .addComponent(jScrollPane1))
  165. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  166. .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE))
  167. .addGroup(layout.createSequentialGroup()
  168. .addComponent(jLabel2)
  169. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  170. .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE)
  171. .addGap(18, 18, 18)
  172. .addComponent(jLabel3)
  173. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  174. .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
  175. .addGap(18, 18, 18)
  176. .addComponent(jLabel4)
  177. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  178. .addComponent(usernameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE)
  179. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  180. .addComponent(masukButton)))
  181. .addContainerGap())
  182. );
  183. layout.setVerticalGroup(
  184. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  185. .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  186. .addContainerGap()
  187. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  188. .addComponent(jLabel2)
  189. .addComponent(serverTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  190. .addComponent(jLabel3)
  191. .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  192. .addComponent(masukButton)
  193. .addComponent(jLabel4)
  194. .addComponent(usernameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  195. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  196. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  197. .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 427, Short.MAX_VALUE)
  198. .addGroup(layout.createSequentialGroup()
  199. .addComponent(jScrollPane1)
  200. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  201. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  202. .addComponent(postTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  203. .addComponent(kirimButton))))
  204. .addContainerGap())
  205. );
  206.  
  207. pack();
  208. }
  209.  
  210. @SuppressWarnings("deprecation")
  211. private void masukButtonActionPerformed(java.awt.event.ActionEvent evt) {
  212. this.server = serverTextField.getText();
  213. this.port = new Integer(portTextField.getText());
  214. this.username = usernameTextField.getText();
  215. start();
  216. }
  217.  
  218. private void kirimButtonActionPerformed(java.awt.event.ActionEvent evt) {
  219. try {
  220. String message = "postText~" + username + "~" + postTextField.getText() + "~all~\n";
  221. output.writeObject(message);
  222. postTextField.setText("");
  223. } catch (IOException ex) {
  224. Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex);
  225. }
  226. }
  227.  
  228. private void postTextFieldActionPerformed(java.awt.event.ActionEvent evt) {
  229. kirimButtonActionPerformed(evt);
  230. }
  231.  
  232. public static void main(String args[]) {
  233. try {
  234. for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
  235. if ("Nimbus".equals(info.getName())) {
  236. javax.swing.UIManager.setLookAndFeel(info.getClassName());
  237. break;
  238. }
  239. }
  240. } catch (ClassNotFoundException ex) {
  241. java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  242. } catch (InstantiationException ex) {
  243. java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  244. } catch (IllegalAccessException ex) {
  245. java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  246. } catch (javax.swing.UnsupportedLookAndFeelException ex) {
  247. java.util.logging.Logger.getLogger(ChatClient.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  248. }
  249.  
  250. /* Create and display the form */
  251. java.awt.EventQueue.invokeLater(new Runnable() {
  252. @Override
  253. public void run() {
  254. new ChatClient().setVisible(true);
  255. }
  256. });
  257. }
  258.  
  259. private javax.swing.JTable clientTable;
  260. private javax.swing.JLabel jLabel2;
  261. private javax.swing.JLabel jLabel3;
  262. private javax.swing.JLabel jLabel4;
  263. private javax.swing.JScrollPane jScrollPane1;
  264. private javax.swing.JScrollPane jScrollPane2;
  265. private javax.swing.JButton kirimButton;
  266. private javax.swing.JButton masukButton;
  267. private javax.swing.JTextField portTextField;
  268. private javax.swing.JTextField postTextField;
  269. private javax.swing.JTextField serverTextField;
  270. private javax.swing.JTextField usernameTextField;
  271. private javax.swing.JTextArea viewTextArea;
  272.  
  273. class ListenFromServer extends Thread {
  274.  
  275. @Override
  276. public void run() {
  277. while (true) {
  278. try {
  279. String msg = (String) input.readObject();
  280. String res;
  281. String type = msg.split("~")[0];
  282. String pengirim = msg.split("~")[1];
  283. String text = msg.split("~")[2];
  284. String kepada = msg.split("~")[3];
  285. switch (type) {
  286. case "recieveText":
  287. res = pengirim + ": " + text;
  288. viewTextArea.setText(viewTextArea.getText() + res + "\n");
  289. break;
  290. case "recievePrivateText":
  291. res = pengirim + ": " + text;
  292. if (kepada.equals(username)) {
  293. viewTextArea.setText(viewTextArea.getText() + res + "\n");
  294. }
  295. break;
  296. case "login":
  297. viewTextArea.setText(viewTextArea.getText() + pengirim + " sedah login..." + "\n");
  298. clients.add(pengirim);
  299. break;
  300. case "logout":
  301. viewTextArea.setText(viewTextArea.getText() + pengirim + " telah logout..." + "\n");
  302. clients.remove(pengirim);
  303. break;
  304. case "list":
  305. setTable(text);
  306. break;
  307. }
  308. } catch (IOException e) {
  309. System.out.println("Server has close the connection: " + e);
  310. break;
  311. } catch (ClassNotFoundException e2) {
  312. }
  313. }
  314. }
  315.  
  316. private void setTable(String text) {
  317. int rows = text.split(":").length - 1;
  318. Object[][] data = new Object[rows][1];
  319. for (int i = 0; i < rows; i++) {
  320. String t = text.split(":")[i];
  321. data[i][0] = t;
  322. }
  323.  
  324. String[] header = {"Clients"};
  325.  
  326. clientTable.setModel(new DefaultTableModel(data, header));
  327. }
  328. }
  329. }
Add Comment
Please, Sign In to add comment