Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1.  
  2. #include "rdt.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <sys/socket.h>
  6. #include <arpa/inet.h>
  7. #include <unistd.h>
  8. #include <ctype.h>
  9. #include <string.h>
  10. #include <iostream>
  11.  
  12. using namespace std;
  13.  
  14. #define MAX_INTENTOS 10
  15.  
  16. int main( int argc, const char* argv[] )
  17. {
  18. int IdRDT,result,cantEnvio;
  19. int count,cantInt,puerto, puertoOrig,puertoDest, tam_archivo;
  20. unsigned char puertoO,puertoD;
  21.  
  22.  
  23. struct in_addr dirOrig;
  24. struct in_addr dirDest;
  25. long lSize;
  26.  
  27.  
  28. if (argc != 6){
  29. printf( "Error, ejecutar %s <puerto_local> <direccionIP_local> <puerto_remoto> <direccionIP_remoto> <nombre_archivo>\n",argv[0]);
  30. exit(-1);
  31. }
  32.  
  33. // cargo variables de la conexion
  34. puerto=atoi( argv[1] );
  35. puertoOrig=(atoi( argv[1] ) % 256);
  36. puertoO = (unsigned char) puertoOrig;
  37. puertoDest=(atoi( argv[3] ) % 256);
  38. puertoD = (unsigned char) puertoDest;
  39.  
  40.  
  41. // configuro direccion del equipo local
  42. inet_aton(argv[2], &dirOrig);
  43. IdRDT = crearRDT(dirOrig);
  44. if ( IdRDT == -1 ){
  45. printf( "Error al crear el Socket\n");
  46. exit(-1);
  47. }
  48. printf( "Conexion creada\n");
  49.  
  50. // Configuro direccion remota y conecto
  51. inet_aton(argv[4], &dirDest);
  52. result = conectarRDT(puertoO,puertoD,dirDest);
  53. if ( result == -1 ) {
  54. printf( "Error al conectar Socket\n");
  55. exit(-1);
  56. }
  57. printf( "Equipo conectado\n");
  58.  
  59. // abro archivo a transmitir
  60. FILE* archivocliente = fopen(argv[5], "rb");
  61. if ( archivocliente == NULL ) {
  62. printf("Error al abrir el archivo\n");
  63. exit(-1);
  64. }
  65. fseek (archivocliente , 0 , SEEK_END);
  66. lSize = ftell (archivocliente);
  67. printf( "Preparando para envio de archivo de largo %ld\n",lSize);
  68. rewind (archivocliente);
  69. char buf[lSize];
  70. //copio el archivo en el buffer
  71. result = fread (buf,1,lSize,archivocliente);
  72. if (result != lSize) {
  73. printf("Error al leer el archivo\n");
  74. exit(-1);
  75. }
  76. fclose(archivocliente);
  77.  
  78. // comienzo proceso de envio
  79. int enviado = 0;
  80. int buffSize = 0;
  81. cantInt = 0;
  82. printf("Envio Archivo de largo %ld \n",lSize);
  83. while (enviado < lSize) {
  84. buffSize = MAX_READ_SIZE;
  85. if ( (lSize - enviado) < MAX_READ_SIZE ){
  86. buffSize = lSize - enviado;
  87. }
  88. result = escribirRDT(&buf[enviado], buffSize);
  89. if ( result == -1 ){
  90. printf("Error al enviar datos\n");
  91. sleep(3);
  92. result = 0;
  93. }
  94. if(result >= 0){
  95. usleep(500);
  96. printf("envie %d bytes de datos\n",result);
  97. enviado = enviado + result;
  98. }
  99. if ( cantInt > 50 ){
  100. enviado = lSize;
  101. }
  102. sleep(5);
  103. cantInt++;
  104. }
  105. printf("Archivo enviado\n");
  106.  
  107. // cierro conexion
  108. cerrarRDT();
  109. printf("Cerrando sesion RDT\n");
  110. sleep(5);
  111. printf("Envio Finalizado\n");
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement