/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Problema en Sockets

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
patoloco



Registrado: 16 Feb 2006
Mensajes: 15

MensajePublicado: 31/05/2006 5:13 am
Título: Problema en Sockets

Buenas, estoy intentando hacer un programa cliente TCP que conecte al puerto 21(ftp), se logee y luego se pueda enviar los comandos al server.
Funciona correctamente, logea y el server acepta el primer comando, ahora bien, cuando escribo el segundo comando, ya el server no responde a ese comando.

el programa es el siguiente:

Cita:

#include <netinet/in.h>
#include <signal.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <resolv.h>
#include <unistd.h>
#include <errno.h>

int errno;
char suser[100];
char spass[100];
int bytes;
char cmd[512],scmd[520];
char buffer[1024],user[10],pass[32];
char httpquery[50]="GET /host HTTP/1.0";

main(int argc, char *argv[])
{
system("clear");
printf("\n\t\t TCP client C0ded By 0ptiK\n\n");
if(argc<3)
{
printf("\n\n\t uso: %s <host> <port> \n",argv[0]);
return(0);
}

struct hostent *ht;
struct sockaddr_in server;
char *host = argv[1];
int port = atoi(argv[2]);

int sd; // nuestro socket

printf("\n[+] Host: %s \n[+] Port: %d \n",host,port);

if((ht=gethostbyname(argv[1])) == NULL)
{
printf("\n[+] Imposible resolver la IP del host.\n ");
abort();
}
if(ht)
{
printf("[+] Ip: %s\n",inet_ntoa(*((struct in_addr *)ht->h_addr)));;
}
if((sd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
printf("\n [+] Error al abrir el socket. ");

bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = ((struct in_addr*)(ht->h_addr))->s_addr;

int co;

if ((co=connect(sd,(struct sockaddr *)&server, sizeof(server))) == -1) //Conectamos...
{
printf("\nError: %d", errno);
printf("\n [+] Conexion rechazada.\n ");
abort();
}
else

printf(" \n conectado! \n\n");

printf("[+] Introduce usuario: ");
scanf("%s",&user);
fflush(stdin);
printf("[+] Introduce passwd: ");
scanf("%s",&pass);
sprintf(suser,"user %s\r\n",user);
sprintf(spass,"pass %s\r\n",pass);

send(sd,suser,strlen(suser),0);
send(sd,spass,strlen(spass),0);
sleep(1);

while (co != -1)
{

bytes = recv(sd, buffer, sizeof(buffer), 0);

if(bytes == -1)
{
printf("\n [+] Error a la hora de recibir datos. ");
abort();
}

buffer[bytes] = '\0';
printf("\n%s",buffer);

scanf("%s",&cmd);
sprintf(scmd,"%s\r\n",cmd);
send(sd,scmd,strlen(scmd)+1,0);
sleep(1);

}

//Cerramos Socket
if(close(sd)==0)
printf("\n [+] Socket cerrado con exito. \n ");

}

Volver arriba
pardu



Registrado: 03 Ago 2006
Mensajes: 11

MensajePublicado: 04/08/2006 12:33 pm
Título:

Hola,

La verdad es que yo hice un proyecto similar hace un tiempo pero siendo como soy corto de memoria no recuerdo los detalles del protocolo.
Mi primera observación sería que dentro del while se encuentra un recv de 1024 bytes (char), lo cual me genera mis dudas, siempre se reciben 1024 bytes en el protocolo?posiblemente podría estar sucediendo que el servidor te envia menos bytes una vez que ingreses el comando, y cuando entra a la segunda vuelta del while se quede trabado en el recv. Espero que respondas ya que no tengo muchas ganas de reveer el RFC del FTP para ver los detalles del protocolo.

Pardu.
Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com