TcpClient.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package rsx.tcp;
  7. import java.io.BufferedReader;
  8. import java.io.IOException;
  9. import java.io.InputStreamReader;
  10. import java.io.PrintWriter;
  11. import java.net.InetAddress;
  12. import java.net.Socket;
  13. import java.net.UnknownHostException;
  14. /**
  15. *
  16. * @author loquicom
  17. */
  18. public class TcpClient {
  19. /**
  20. * Adresse du serveur
  21. */
  22. protected InetAddress adr;
  23. /**
  24. * Port du serveur
  25. */
  26. protected int port;
  27. /**
  28. * Socket TCP
  29. */
  30. protected Socket socket;
  31. /**
  32. * Timeout de la socket (en milisecondes)
  33. */
  34. protected int timeout = 0;
  35. /**
  36. * Flux d'entrée
  37. */
  38. protected BufferedReader input;
  39. /**
  40. * Flux de sorti
  41. */
  42. protected PrintWriter output;
  43. /* --- Constructeurs --- */
  44. /**
  45. * Creation d'un client TCP
  46. *
  47. * @param ip L'ip du serveur
  48. * @param port Le port du serveur
  49. * @throws UnknownHostException
  50. */
  51. public TcpClient(String ip, int port) throws UnknownHostException {
  52. this.adr = InetAddress.getByName(ip);
  53. this.port = port;
  54. }
  55. /**
  56. * Creation d'un client TCP
  57. *
  58. * @param adr L'adresse du serveur
  59. * @param port Le port du serveur
  60. */
  61. public TcpClient(InetAddress adr, int port) {
  62. this.adr = adr;
  63. this.port = port;
  64. }
  65. /* --- Methodes --- */
  66. /**
  67. * Temps avant timeout du receive (qui retournera false)
  68. * @param second Le temps en senconde
  69. */
  70. public void timeout(int second) {
  71. this.timeout = second * 1000;
  72. }
  73. /**
  74. * Retire un timeout
  75. */
  76. public void notimeout() {
  77. this.timeout = 0;
  78. }
  79. /**
  80. * Connexion au serveur
  81. *
  82. * @return Reussite
  83. */
  84. public boolean connect() {
  85. try {
  86. this.socket = new Socket(this.adr, this.port);
  87. //Si un timeout
  88. if (this.timeout > 0) {
  89. this.socket.setSoTimeout(this.timeout);
  90. }
  91. //Ouverture flux
  92. this.input = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
  93. this.output = new PrintWriter(this.socket.getOutputStream());
  94. } catch (IOException ex) {
  95. System.err.println("Impossible de se connecter au serveur : " + ex.getMessage());
  96. return false;
  97. }
  98. return true;
  99. }
  100. /**
  101. * Envoi message au serveur
  102. *
  103. * @param msg Le message
  104. * @return Reussite
  105. */
  106. public boolean send(String msg) {
  107. output.print(msg);
  108. output.flush();
  109. return true;
  110. }
  111. /**
  112. * Reception d'un message du serveur
  113. *
  114. * @return Le message ou null en cas d'erreur
  115. */
  116. public String receive() {
  117. try {
  118. return input.readLine();
  119. } catch (IOException ex) {
  120. //Si pas l'exception du timeout
  121. if (!ex.getMessage().equals("Read timed out")) {
  122. System.err.println("Impossible de lire : " + ex.getMessage() + " ");
  123. }
  124. return null;
  125. }
  126. }
  127. /**
  128. * Ferme la connexion au serveur
  129. *
  130. * @return Reussite
  131. */
  132. public boolean close() {
  133. try {
  134. input.close();
  135. output.close();
  136. socket.close();
  137. } catch (IOException ex) {
  138. System.err.println("Impossible de de fermer le client : " + ex.getMessage());
  139. return false;
  140. }
  141. return true;
  142. }
  143. /* --- Getter/Setter --- */
  144. public InetAddress getAdr() {
  145. return adr;
  146. }
  147. public void setAdr(InetAddress adr) {
  148. this.adr = adr;
  149. }
  150. public int getPort() {
  151. return port;
  152. }
  153. public void setPort(int port) {
  154. this.port = port;
  155. }
  156. }