Article View: chile.comp.programacion
Article #3166Re: problema programando socket
From: Rickoj
Date: Mon, 23 May 2005 21:35
Date: Mon, 23 May 2005 21:35
88 lines
3997 bytes
3997 bytes
En las news:d6tdfe$8tf$1@helcaraxe.dcc.uchile.cl, a PS se le ocurrio tipear:
> Rick_oj wrote:
>> Estoy programando un socket, un amigo me paso un socket de conexion ya
>> hecho, al cual le elimine lo que necesitaba y resulto en esto (codigo
>> completo)
>>
>> ********************* incio codigo********************************
>> printf("\tIngrese el correo que desea leer: ");
>> scanf("%d",&opc);
>> sprintf(buf,"RETR %d\n",opc);//con esto leo cada correo
>> if((numbytes=send(sockfd,buf,strlen(buf),0)) == -1)
>> {
>> perror("recv");
>> exit(1);
>> };
>> memset(buf,0x0,MAXDATASIZE);
>> if((numbytes=recv(sockfd,buf,MAXDATASIZE-1,0)) == -1)
>> {
>> perror("recv");
>> exit(1);
>> };
>> printf("\n\t%s",buf);
>> sleep(5);
>> sprintf(buf,"QUIT\n");
>> if((numbytes=send(sockfd,buf,strlen(buf),0)) == -1){
>> perror("recv");
>> exit(1);
>> };
>> memset(buf,0x0,MAXDATASIZE);
>> if((numbytes=recv(sockfd,buf,MAXDATASIZE-1,0)) == -1){
>> perror("recv"); exit(1);
>> };
>> close(sockfd);
>> }
>> ****************** fin de codigo***************
>>
>> el problema que tengo es que al ingresar el numero del correo que deso
leer,
>> solo me entrega la primera linea es decir
>> "+OK xxxx bytes" (siendo xxx los bytes del correo), pareciera ser que
solo
>> la primera linea se almacena en buf, agradezco ayuda ya que de sockets no
se
>> mucho
>>
>
> Hola,
>
> Tu problema es que el protocolo POP te esta entregando primero que todo
> algo conocido "+OK xxxx bytes" en donde te indica el taman~o en bytes
> que tiene el mensaje que quieres recibir, entonces en esa primera
> recepcion debes parsear dicha linea y obtener la cantidad de bytes,
> luego con otro read/recv obtienes dicha cantidad de bytes desde el socket.
>
> De hecho para ser mas preciso, el servidor POP te esta enviando todo de
> 1 vez (taman~o + mensaje) el punto es que no los podras obtener en 1
> solo read/recv pues el posiblemente el servidor lo hace con mas de 1
> write (1 para el taman~o y 1 o mas para el mensaje).
>
> Como consejo, deberias utilizar algun approach usando una rutina de
> fixread() que lea exactamente la cantidad de bytes que estas solicitando.
>
> ---- Cortar aqui -----
> int fixread(int s, char *buff, int len)
> {
> int l, index;
> index=0;
> while( len > 0 )
> {
> l = read(s, buff + index, len);
>
> if( l <= 0 )
> return l;
> index = index + l;
> len = len - l;
> }
> return index;
> }
> -----------------------
>
> Saludos,
>
> PS
muchas gracias voy a echarle una mirada solo para salir de la curiodad, ya
que finalmente termine utilizando una libreria GNU, por que estaba tardando
demasiado en resolver el problema, imagine que el problema era de que solo
me recibia la primera linea del servidor
Technical Details
Message-ID:
<d6ti8c$ahg$1@news1.nivel5.cl>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!news.kjsl.com!news1.nivel5.cl!not-for-mailReferences:
<d6loku$hgf$1@news1.nivel5.cl> <d6tdfe$8tf$1@helcaraxe.dcc.uchile.cl>Show Full Headers
Complete Article Headers
X-Google-Thread: 1593cb,8a1971cc8ba8724e X-Google-Thread: 1054ea,8a1971cc8ba8724e X-Google-Attributes: gid1593cb,gid1054ea,public X-Google-Language: SPANISH,ASCII-7-bit Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!news.kjsl.com!news1.nivel5.cl!not-for-mail From: "Rick_oj" <rick_oj@[sin-esto]tutopia.com> Newsgroups: chile.comp.programacion,chile.comp.unix Subject: Re: problema programando socket Date: Mon, 23 May 2005 17:35:40 -0400 Organization: Varios Lines: 90 Message-ID: <d6ti8c$ahg$1@news1.nivel5.cl> References: <d6loku$hgf$1@news1.nivel5.cl> <d6tdfe$8tf$1@helcaraxe.dcc.uchile.cl> NNTP-Posting-Host: pc-97-201-120-200.cm.vtr.net X-Trace: news1.nivel5.cl 1116884044 10800 200.120.201.97 (23 May 2005 21:34:04 GMT) X-Complaints-To: news@news1.nivel5.cl NNTP-Posting-Date: Mon, 23 May 2005 21:34:04 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1478 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1478