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.

Server.java 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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.ServerSocket;
  12. import java.net.Socket;
  13. import java.sql.Timestamp;
  14. import java.text.SimpleDateFormat;
  15. import java.util.Observable;
  16. import java.util.logging.Level;
  17. import java.util.logging.Logger;
  18. /**
  19. *
  20. * @author Marian
  21. */
  22. public class Server extends Observable implements Runnable
  23. {
  24. private int port;
  25. private ServerSocket server;
  26. private Socket client;
  27. private static Logger logger = OhmLogger.getLogger();
  28. private BufferedReader reader;
  29. private PrintWriter writer;
  30. private volatile boolean ready;
  31. private Thread thd;
  32. private static final SimpleDateFormat sdf = new SimpleDateFormat("HH.mm.ss");
  33. public Server(int port)
  34. {
  35. this.port = port;
  36. this.server = null;
  37. this.client = null;
  38. this.reader = null;
  39. this.writer = null;
  40. this.ready = false;
  41. this.thd = null;
  42. }
  43. public void init()
  44. {
  45. if (thd == null) {
  46. thd = new Thread(this);
  47. thd.start();
  48. }
  49. }
  50. @Override
  51. public void run()
  52. {
  53. logger.info("Running server...");
  54. while (true)
  55. {
  56. if (server == null) {
  57. try {
  58. server = new ServerSocket(port);
  59. } catch (IOException e) {
  60. logger.severe(e.toString());
  61. return;
  62. }
  63. logger.info("Waiting for client to connect");
  64. try {
  65. client = server.accept();
  66. } catch (IOException e) {
  67. logger.severe(e.toString());
  68. return;
  69. }
  70. logger.info("Client connected");
  71. InputStream iStream;
  72. try {
  73. iStream = client.getInputStream();
  74. } catch (IOException e) {
  75. logger.severe(e.toString());
  76. return;
  77. }
  78. OutputStream oStream;
  79. try {
  80. oStream = client.getOutputStream();
  81. } catch (IOException e) {
  82. logger.severe(e.toString());
  83. return;
  84. }
  85. InputStreamReader isr;
  86. try {
  87. isr = new InputStreamReader(iStream, "UTF-8");
  88. } catch (UnsupportedEncodingException e) {
  89. logger.severe(e.toString());
  90. return;
  91. }
  92. OutputStreamWriter osr;
  93. try {
  94. osr = new OutputStreamWriter(oStream, "UTF-8");
  95. } catch (UnsupportedEncodingException e) {
  96. logger.severe(e.toString());
  97. return;
  98. }
  99. reader = new BufferedReader(isr);
  100. writer = new PrintWriter(osr);
  101. ready = true;
  102. }
  103. if (ready) {
  104. try {
  105. logger.info("Waiting for message");
  106. String msg = reader.readLine();
  107. if (msg == null) {
  108. ready = false;
  109. continue;
  110. }
  111. this.setChanged();
  112. this.notifyObservers(msg);
  113. } catch (IOException e) {
  114. logger.severe(e.toString());
  115. ready = false;
  116. continue;
  117. }
  118. }
  119. }
  120. }
  121. public void sendMessage(String msg)
  122. {
  123. if (ready) {
  124. writer.println(msg);
  125. writer.flush();
  126. } else {
  127. logger.warning("Server not ready to send message. Connect first");
  128. }
  129. }
  130. }