aioritos
2005-06-23 11:51:13 UTC
HOLA.
ESPERO QUE ALGUIEN PUEDA AYUDARME CON ESTO.
ESTOY HACIENDO UN CLIENTE FTP. DE MOMENTO LA CONEXION LA REALIZO EN TCP
Y ME VA BIEN TODO. (usuario contraseña ,etc)
LOS PROBLEMAS ME SURGEN A LA HORA DE ENVIAR UN FICHERO, p.e.
/home/pepe/aqui/hola.txt
TENGO UN SOCKET ABIERTO CON LA CONEXIO, PERO SE SUPONE QUE NECESITO
OTRO PARA ENVIAR LOS DATOS, POR EL PUERTO 20.....
PERO NO ESTOY SEGURO DE ESTO QUE HAGO ....
CREO MI COMANDO STOR CON EL NOMBRE DEL FICHERO REMOTO
ABRO UN NUEVO SOCKET
MI struct sockaddr_in ES IGUAL QUE EN LA CONEXION, PERO EN VEZ DEL
PUERTO 21 ASIGNO EL 20
HAGO UN bind(data_id, (struct sockaddr *) &name, sizeof(struct
sockaddr)); DONDE DATA_ID ES EL IDENTIFICADOR DEL NUEVO SOCKET ABIERTO
Y NAME ES LA struct sockaddr_in
ACONTINUACION ESTO (como basicamente es un copy paste, no se muy bien
explicar.Se supone que el resutado es la direccion IP separada por
comas, y lo que me lia bastante es los dos ultimos, los del puerto)
sprintf(port_name, "PORT %d,%d,%d,%d,%d,%d\r\n",
(host_id & 0x000000FF),
(host_id & 0x0000FF00) >> 8,
(host_id & 0x00FF0000) >> 16,
(host_id & 0xFF000000) >> 24,
(name.sin_port & 0xFF00) >> 8,
(name.sin_port & 0x00FF));
ENVIO EL COMANDO CON SEND Y DESPUES ESTOS
send(control_socket_id, "TYPE I\r\n", 8, 0);
send(control_socket_id, "MODE S\r\n", 8, 0);
HASTA AQUI SE SUPONE QUE ME DICE "successful" pero no debe ir bien pq
se queda colgao en la siguiente instruccion que es :
errorlevel = sizeof(name); /*errorlevel es un int*/
/*aqui no llega la ejecucion. Se para en la anterior*/
stream_id = accept(data_id, (struct sockaddr *) &name,
&errorlevel);
NO SE SI EL PROBLEMA ESTA CLARO PERO TENGO MUXO INTERES EN QUE ALGUIEN
ME AYUDE
GRACIAS!!
ESPERO QUE ALGUIEN PUEDA AYUDARME CON ESTO.
ESTOY HACIENDO UN CLIENTE FTP. DE MOMENTO LA CONEXION LA REALIZO EN TCP
Y ME VA BIEN TODO. (usuario contraseña ,etc)
LOS PROBLEMAS ME SURGEN A LA HORA DE ENVIAR UN FICHERO, p.e.
/home/pepe/aqui/hola.txt
TENGO UN SOCKET ABIERTO CON LA CONEXIO, PERO SE SUPONE QUE NECESITO
OTRO PARA ENVIAR LOS DATOS, POR EL PUERTO 20.....
PERO NO ESTOY SEGURO DE ESTO QUE HAGO ....
CREO MI COMANDO STOR CON EL NOMBRE DEL FICHERO REMOTO
ABRO UN NUEVO SOCKET
MI struct sockaddr_in ES IGUAL QUE EN LA CONEXION, PERO EN VEZ DEL
PUERTO 21 ASIGNO EL 20
HAGO UN bind(data_id, (struct sockaddr *) &name, sizeof(struct
sockaddr)); DONDE DATA_ID ES EL IDENTIFICADOR DEL NUEVO SOCKET ABIERTO
Y NAME ES LA struct sockaddr_in
ACONTINUACION ESTO (como basicamente es un copy paste, no se muy bien
explicar.Se supone que el resutado es la direccion IP separada por
comas, y lo que me lia bastante es los dos ultimos, los del puerto)
sprintf(port_name, "PORT %d,%d,%d,%d,%d,%d\r\n",
(host_id & 0x000000FF),
(host_id & 0x0000FF00) >> 8,
(host_id & 0x00FF0000) >> 16,
(host_id & 0xFF000000) >> 24,
(name.sin_port & 0xFF00) >> 8,
(name.sin_port & 0x00FF));
ENVIO EL COMANDO CON SEND Y DESPUES ESTOS
send(control_socket_id, "TYPE I\r\n", 8, 0);
send(control_socket_id, "MODE S\r\n", 8, 0);
HASTA AQUI SE SUPONE QUE ME DICE "successful" pero no debe ir bien pq
se queda colgao en la siguiente instruccion que es :
errorlevel = sizeof(name); /*errorlevel es un int*/
/*aqui no llega la ejecucion. Se para en la anterior*/
stream_id = accept(data_id, (struct sockaddr *) &name,
&errorlevel);
NO SE SI EL PROBLEMA ESTA CLARO PERO TENGO MUXO INTERES EN QUE ALGUIEN
ME AYUDE
GRACIAS!!