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 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. thd = new Thread(this);
  43. thd.start();
  44. }
  45. }
  46. public void sendMessage(String msg)
  47. {
  48. if (ready) {
  49. writer.println(msg);
  50. writer.flush();
  51. } else {
  52. logger.warning("Server not ready to send message. Connect first");
  53. }
  54. }
  55. @Override
  56. public void run()
  57. {
  58. logger.info("Running client...");
  59. while (true)
  60. {
  61. if (socket == null) {
  62. try {
  63. socket = new Socket(ip, port);
  64. logger.info("Connected to server");
  65. } catch (IOException e) {
  66. logger.severe(e.getMessage());
  67. socket = null;
  68. try {
  69. Thread.sleep(1000);
  70. } catch (InterruptedException ex) {
  71. Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
  72. }
  73. continue;
  74. }
  75. InputStream iStream;
  76. try {
  77. iStream = socket.getInputStream();
  78. } catch (IOException e) {
  79. logger.severe(e.getMessage());
  80. return;
  81. }
  82. OutputStream oStream;
  83. try {
  84. oStream = socket.getOutputStream();
  85. } catch (IOException e) {
  86. logger.severe(e.getMessage());
  87. return;
  88. }
  89. InputStreamReader isr;
  90. try {
  91. isr = new InputStreamReader(iStream, "UTF-8");
  92. } catch (UnsupportedEncodingException e) {
  93. logger.severe(e.getMessage());
  94. return;
  95. }
  96. OutputStreamWriter osr;
  97. try {
  98. osr = new OutputStreamWriter(oStream, "UTF-8");
  99. } catch (UnsupportedEncodingException e) {
  100. logger.severe(e.getMessage());
  101. return;
  102. }
  103. reader = new BufferedReader(isr);
  104. writer = new PrintWriter(osr);
  105. ready = true;
  106. }
  107. if (ready) {
  108. String msg;
  109. try {
  110. logger.info("Waiting for message");
  111. msg = reader.readLine();
  112. } catch (IOException e) {
  113. logger.severe(e.toString());
  114. return;
  115. }
  116. this.setChanged();
  117. this.notifyObservers(msg);
  118. }
  119. }
  120. }
  121. }