UTNianos

Versión completa: [Consulta] Duda sobre socket
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
¿Como hago para leer linea por linea?
Realizo la conexión entre sockets. Pero cuando envio los buffers con un while, el cliente en vez de recibir buffer por buffer, lo lee en un buffer.
Existe alguna función al respecto.

SERVIDOR:
while (buffer!=NULL)
{
send(fd, buffer, strlen(buffer), 0); //Acá se cumple
}

CLIENTE:
while (recv(fd, buffer, 100, 0) != 0)
{
//Acá lo recibo en el buffer de una vez, pero me gustaría que fuera por partes.
}

Gracias, si no me explique bien avisen.
Te dejo las funciones de la cátedra, vendrian a ser de mas alto nivel que programar socket desde cero.. Nose de donde las saque, pero son las que te piden que uses en los finales.


int conectar (int argc, char * argv[]);
int Open_conection ( struct sockaddr_in * my_addr);
int Aceptar_pedidos (int sockfd);


En el adjunto que te mando hay un ejemplo hecho..
Pero modificandolo un poco (aprendiendote la parte de la conexion), y usando read y write junto con los file descriptor podes hacer casi cualquier cosa que te puedan llegar a tomar.

Saludos!
(09-02-2013 21:26)JulianD escribió: [ -> ]Te dejo las funciones de la cátedra, vendrian a ser de mas alto nivel que programar socket desde cero.. Nose de donde las saque, pero son las que te piden que uses en los finales.


int conectar (int argc, char * argv[]);
int Open_conection ( struct sockaddr_in * my_addr);
int Aceptar_pedidos (int sockfd);


En el adjunto que te mando hay un ejemplo hecho..
Pero modificandolo un poco (aprendiendote la parte de la conexion), y usando read y write junto con los file descriptor podes hacer casi cualquier cosa que te puedan llegar a tomar.

Saludos!

¿Osea que puedo utilizarlos en cualquier parcial o final como quiera?. ¿Son obligatorias?.
Te agradezco porque no sabia.
No se si "como quieras".
Pero por lo general en los finales cuando toman sockets te tiran esos prototipos para que programes

_____________________________

Ah. Aca esta de donde lo saque:

http://www.electron.frba.utn.edu.ar/~afu...o1/socket/
tenes que entender bien como funcionan los sockets. la cantidad que vos mandas, no se correlaciona con la que recibis. pensa en el correo, vos mandas 5 cartas, todas llegan al buzon del destinatario, y se quedan esperando a que las recojan. por ende, por mas que las cartas se hayan mandado separadas, cuando llegan parece como si hubieran llegado todas juntas.

lo mismo pasa con lo que envies por socket. un proceso envia, y otro recibe, pero hay un buffer en el medio. y cuando haces un recv te trae todo lo que tenga el buffer, sin distinguir por "paquetes". eso lo tenes que hacer vos.
lo mas convencional es armar un buffer en tu programa, e ir leyendo caracter por caracter desde ahi, hasta encontrarte con una marca que indique que ese paquete termino(en tu caso un EOL).

para aprender sockets, es muy recomendable esta guia: http://grupotp7542taller1.googlecode.com/files/beej.pdf
Gracias y es justo lo que hice finalmente. Pero pensé que quizás exista alguna función que me lo reciba por partes.
salu2.
URLs de referencia