You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Client.java 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package chatprogramm.model;
  2. import chatprogramm.logger.OhmLogger;
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStream;
  8. import java.io.OutputStreamWriter;
  9. import java.io.PrintWriter;
  10. import java.io.UnsupportedEncodingException;
  11. import java.net.Socket;
  12. import java.util.Observable;
  13. import java.util.logging.Level;
  14. import java.util.logging.Logger;
  15. /**
  16. *
  17. * @author Marian
  18. */
  19. public class Client extends Observable implements Runnable
  20. {
  21. private Socket socket;
  22. private BufferedReader reader;
  23. private PrintWriter writer;
  24. private boolean ready;
  25. private Thread thd;
  26. private String ip;
  27. private int port;
  28. private static Logger logger = OhmLogger.getLogger();
  29. public Client(String ip, int port)
  30. {
  31. this.ip = ip;
  32. this.port = port;
  33. this.socket = null;
  34. this.reader = null;
  35. this.writer = null;
  36. this.ready = false;
  37. this.thd = null;
  38. }
  39. public void init()
  40. {
  41. if (thd == null)
  42. {
  43. thd = new Thread(this);
  44. thd.start();
  45. }
  46. }
  47. public void sendMessage(String msg)
  48. {
  49. if (ready)
  50. {
  51. writer.println(msg);
  52. writer.flush();
  53. }
  54. else
  55. {
  56. logger.warning("Server not ready to send message. Connect first");
  57. }
  58. }
  59. @Override
  60. public void run()
  61. {
  62. logger.info("Running client...");
  63. while (true)
  64. {
  65. if (socket == null)
  66. {
  67. try
  68. {
  69. socket = new Socket(ip, port);
  70. logger.info("Connected to server");
  71. }
  72. catch (IOException e)
  73. {
  74. logger.severe(e.getMessage());
  75. socket = null;
  76. try
  77. {
  78. Thread.sleep(1000);
  79. }
  80. catch (InterruptedException ex)
  81. {
  82. Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
  83. }
  84. continue;
  85. }
  86. InputStream iStream;
  87. try
  88. {
  89. iStream = socket.getInputStream();
  90. }
  91. catch (IOException e)
  92. {
  93. logger.severe(e.getMessage());
  94. return;
  95. }
  96. OutputStream oStream;
  97. try
  98. {
  99. oStream = socket.getOutputStream();
  100. }
  101. catch (IOException e)
  102. {
  103. logger.severe(e.getMessage());
  104. return;
  105. }
  106. InputStreamReader isr;
  107. try
  108. {
  109. isr = new InputStreamReader(iStream, "UTF-8");
  110. }
  111. catch (UnsupportedEncodingException e)
  112. {
  113. logger.severe(e.getMessage());
  114. return;
  115. }
  116. OutputStreamWriter osr;
  117. try
  118. {
  119. osr = new OutputStreamWriter(oStream, "UTF-8");
  120. }
  121. catch (UnsupportedEncodingException e)
  122. {
  123. logger.severe(e.getMessage());
  124. return;
  125. }
  126. reader = new BufferedReader(isr);
  127. writer = new PrintWriter(osr);
  128. ready = true;
  129. }
  130. if (ready)
  131. {
  132. String msg;
  133. try
  134. {
  135. logger.info("Waiting");
  136. msg = reader.readLine();
  137. }
  138. catch (IOException e)
  139. {
  140. logger.severe(e.toString());
  141. return;
  142. }
  143. this.setChanged();
  144. this.notifyObservers(msg);
  145. }
  146. }
  147. }
  148. }