Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.25 KB | None | 0 0
  1. /*****************************************************************
  2.  
  3. --> server-uni.c
  4.  
  5. Module d'utilisation d'un serveur connexion unique via un socket TCP sur Unix
  6.  
  7. Stevens Gagnon
  8. Departement Informatique
  9. College Shawinigan
  10.  
  11. ******************************************************************/
  12.  
  13. #define MAX_BUFFER 100
  14. #define TX_TIMEOUT 0
  15. #define RX_TIMEOUT 0
  16.  
  17. // ---- Parametres specifique au serveur
  18.  
  19. #define ADR_LISTEN "INADDR_ANY" // "INADDR_ANY" ou "192.168.2.2"
  20. #define PORT_NET 32150 /* Port sur lequel le serveur attend */
  21.  
  22.  
  23. /* ------------------------------------------------------------- */
  24.  
  25. #include "sg_tcp.h"
  26.  
  27. //---------------------------------------------------------------- main
  28.  
  29. int
  30. main()
  31. {
  32. int i;
  33. int serveur;
  34. int client;
  35. int compt, status, nbpaquet;
  36. char buffer_in[MAX_BUFFER+1];
  37. char buffer_out[MAX_BUFFER+1];
  38.  
  39. int n, lg;
  40.  
  41. buffer_in[MAX_BUFFER] = 0;
  42. buffer_out[MAX_BUFFER] = 0;
  43.  
  44. FILE *U_Tx;
  45. U_Tx = fopen("prog", "r");
  46.  
  47. if( U_Tx == NULL)
  48. {
  49. printf("--------------------- Probleme de fichier\n");
  50. return 0;
  51. }
  52. printf("\n---------------- ");
  53. serveur = setup_tcp_serveur(ADR_LISTEN, PORT_NET, MAX_BUFFER, TX_TIMEOUT, RX_TIMEOUT);
  54. if ( serveur != -1 )
  55. {
  56. client = accept_tcp_client(serveur);
  57. close(serveur);
  58. }
  59.  
  60. if ( client != -1)
  61. {
  62. printf("\n---------------- ");
  63. prt_IP( client );
  64. printf(" ----------------\n");
  65.  
  66. bzero(buffer_in,MAX_BUFFER);
  67.  
  68. lg = recv(client,buffer_in,MAX_BUFFER, 0); // reception
  69. if (lg < 0)
  70. {
  71. perror("\n\nERREUR read\n\n");
  72. }
  73. else
  74. {
  75. //printf("\nDatagram recu: \nLongueur(%i) \n-->%s<--\n\n", lg, buffer_in);
  76. do
  77. {
  78. MAX_BUFFER = 100;
  79. bzero(buffer_out,MAX_BUFFER);
  80. compt = 0;
  81.  
  82. //Remplir le paquetTx
  83. while ((compt < MAX_BUFFER) && (status != EOF))
  84. {
  85. status = fscanf(U_Tx, "%1c", &buffer_out[compt]);
  86. compt++;
  87. }
  88. //snprintf( buffer_out, MAX_BUFFER, ")%s(", buffer_in );
  89. lg = compt;
  90. //printf("-->Serveur transmet %i bytes ==>>%s<<==", lg, buffer_out);
  91. printf("\nPaquet transmit: \nLongueur(%i) \n\n", lg+2, buffer_out);
  92.  
  93. n = send(client,buffer_out,strlen( buffer_out ), 0); // Transmission
  94. if (n < 0) perror("\n\nERREUR write\n\n");
  95. printf("Transmission de %i byte terminee", lg);//ou ajouter +2??
  96.  
  97. // strlen() = Retourne la longueur du CONTENU, pas de la BOITE"
  98. // ne fonctionne que avec de STRING !
  99. // IMPOSSIBLE d'utiliser avec du BINAIRE.
  100. } while (status != EOF);
  101.  
  102. //(ok) Transmet le paquet en NULL pour signifier la fin
  103. bzero(buffer_out,MAX_BUFFER+1); //Mettre des NULL dans tout les place de paquetTx
  104. lg = strlen(buffer_out); //calcule longeur de buffer_out
  105. //printf("\n-->Serveur transmet %i bytes ==>>%s<<== (la fin)", lg, buffer_out);
  106. //printf("\n ->TO: ");
  107. // prt_sockaddr_in(client);
  108. //id = socket2id(client);
  109. //printf(" ->socket2id = %12lX\n", id);
  110.  
  111. n = send(client,buffer_out,strlen( buffer_out ), 0); // Transmission
  112. if (n < 0) perror("\n\nERREUR write\n\n");
  113. printf("Transmission de %i byte terminee", lg);//ou ajouter +2??
  114. printf("\n --> Fin prog (%i paquets envoyés)\n", nbpaquet);
  115. }
  116. close(client);
  117. }
  118. }
  119.  
  120. /*********************************************************************************************************************************/
  121.  
  122. /*****************************************************************
  123.  
  124. --> client-1234.c
  125.  
  126. Module d'utilisation d'un client via un socket TCP sur Unix
  127.  
  128. Stevens Gagnon
  129. Departement Informatique
  130. College Shawinigan
  131.  
  132. ******************************************************************/
  133.  
  134. #define MAX_BUFFER 100
  135. #define TX_TIMEOUT 0
  136. #define RX_TIMEOUT 0
  137.  
  138. // ---- Parametres specifique au serveur
  139.  
  140. #define ADR_SERVER "amx.xoox.ca" // "amx.xoox.ca" -ou- "234.12.24.2"
  141. #define PORT_NET 32150 // Port sur lequel le serveur attend
  142.  
  143. /* ------------------------------------------------------------- */
  144.  
  145. #include "sg_tcp.h"
  146.  
  147. //-------------------------------------------------------------------------------------- main
  148.  
  149. int main()
  150. {
  151. char buffer[MAX_BUFFER+1];
  152. int client;
  153. int n, lg, lg_recu,lg_tx;
  154. /**************************************************/
  155. int status, compteur;
  156. int nbPack_send = 0;
  157. char buffer_out[MAX_BUFFER+1];
  158. char buffer_in[MAX_BUFFER+1];
  159.  
  160. FILE *fichier;
  161. fichier = fopen("prog", "w");
  162.  
  163. if( fichier == NULL)
  164. {
  165. printf("--------------------- Probleme de fichier\n");
  166. return 0;
  167. }
  168. printf("--------------------- Fichier prog ok\n");
  169. /*************************************************************/
  170. client = setup_tcp_client(ADR_SERVER, PORT_NET, MAX_BUFFER, TX_TIMEOUT, RX_TIMEOUT);
  171.  
  172. if( client != -1 )
  173. {
  174. printf("\nEnvoi de la demande du fichier prog au serveur (automatique): ");
  175.  
  176. bzero(buffer, MAX_BUFFER);
  177.  
  178. //scanf("prog", buffer );
  179. buffer[0] = 'p';
  180. buffer[1] = 'r';
  181. buffer[2] = 'o';
  182. buffer[3] = 'g';
  183.  
  184. lg = strlen( buffer ); // Retourne la longueur du CONTENU, pas de la BOITE"
  185. // ne fonctionne que avec de STRING !
  186. // IMPOSSIBLE d'utiliser avec du BINAIRE.
  187.  
  188. n = send(client,buffer,lg, 0); // Transmission
  189. if (n < 0)
  190. {
  191. perror("\n\nERREUR write\n\n");
  192. }/*****************************************************************************************/
  193. else
  194. {
  195. //Recoit le fichier prog a coup de 100 bytes**************************************************************************************
  196. do
  197. {
  198.  
  199. bzero(buffer_in,MAX_BUFFER);
  200. lg_recu = recv(client,buffer_in,MAX_BUFFER, 0); // Reception
  201.  
  202. if (lg_recu < 0) //Si nb byte recu est moins de 0 donc erreur
  203. {//Erreur de reception
  204. perror("ERREUR recv");
  205. exit(EXIT_FAILURE);
  206. }
  207. else
  208. {
  209. buffer_in[lg_recu] = 0;
  210. compteur = 0;
  211.  
  212. if (lg_recu != 0)
  213. {
  214. if(lg_recu < 100)
  215. {
  216. do
  217. {
  218. fprintf(fichier, "%c", buffer_in[compteur]);
  219. compteur++;
  220. } while (compteur < lg_recu-1);
  221. }
  222.  
  223. else
  224. {
  225. do
  226. {
  227. fprintf(fichier, "%c", buffer_in[compteur]);
  228. compteur++;
  229. } while (compteur < lg_recu);
  230. }
  231. }
  232.  
  233. snprintf(buffer_out, MAX_BUFFER, "%s", buffer_in); //paquetTx = paquetRx;
  234. //lg_out = strlen(paquetTx); //calculer la longeur du nom de fichier
  235. //paq_lg = sizeof( struct sockaddr_in);
  236. lg_tx=send(client, buffer_out, MAX_BUFFER,0);
  237.  
  238. if (lg_tx < 0) //Si la longeur paquetTx transmit est negative donc erreur
  239. {
  240. perror("ERREUR Sendto");
  241. exit(EXIT_FAILURE);
  242. }
  243. printf(" ->Confirmé\n");
  244. nbPack_send++;
  245.  
  246. }
  247. } while(lg_recu > 0);
  248.  
  249.  
  250. //printf("\nDatagram recu: \nLongueur(%i) \nContenu -->%s<--\n\n", lg, buffer);
  251. }
  252. close(client);
  253. }
  254. fclose(fichier);
  255. }
  256.  
  257. //--------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement