¿Ayuda con sockets C++?

Iniciado por ApOkAlizE, 7 Octubre 2012, 02:36 AM

0 Miembros y 1 Visitante están viendo este tema.

ApOkAlizE

Bueno lo que me sucede es que estoy haciendo una programa usando C++ en CODE::BLOCKS, pues bueno, ya hice hace medio año uno tamién en C++ pero usando visual studio 2010 y ese funcionava, pero comparo el codigo con el que estoy haciendo ahora y esta todo igual, todo y eso en el siguiente codigo:
long reb;
char rebre[10001];
memset(rebre,0,10001);
int i = 2000;
setsockopt(Connectar,SOL_SOCKET,SO_RCVTIMEO,(const char *)&i,sizeof(i));
reb = recv(Connectar, rebre,10001 ,0);
if(reb == -1)
{
     //MENSAJE DE ALERTA
}
pues para ser exactos ni siquiera espera los 2 segundos para recibir datos y siempre entra en el if de -1 o sea error... pero la conexion se abre y realmente por ejemplo los send si que se envian(lo he comprovado por telnet)... ¿Alguien tiene alguna idea de que puede estar pasando?
Gracias de antemano.
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

Anvil

El compilador de Visual Studio es distinto al de CodeBlocks, revisa que no te esten faltando librerías.
\\::_--__!!ss"1122

oPen syLar

Postea todo el código.. que mensaje de alerta te lanza.? Seguro que al setear las opciones de tu socket.. Tienes un socket valido.?

strerror es tu amigo =)

man strerror
Siempre habra 2 verdades, la que quieres creer y la que no aceptaras

ApOkAlizE

oPen sYlar he provado con strerror y devuelve la cadena de "result too large"...
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE

ApOkAlizE

Aquí dejo el trozo de codigo correspondiente als sockets.
Y he linkeado al proyecto:
libwsock32.a
libws2_32.a
libwxmsw28u.a


SERVIDOR:

#define _WIN32_WINNT 0x501
#include "windows.h"
#include "winsock2.h"
#include "ws2tcpip.h"
#pragma comment(lib, "ws2_32.lib")



int main()
{
WSAData wsa;
        WORD Versio = MAKEWORD(2,1);
         WSAStartup(Versio, &wsa);
      SOCKET Escoltar = socket(AF_INET ,SOCK_STREAM , NULL);
      SOCKET Connectar = socket(AF_INET ,SOCK_STREAM , NULL);
      SOCKADDR_IN Servidor;
      Servidor.sin_addr.s_addr = inet_addr( "192.168.1.13" );
      Servidor.sin_family = AF_INET;
      Servidor.sin_port = htons(800);
      Tornemi:
        int Connectat;
        Connectat = 0;
      bind(Escoltar, (SOCKADDR*)&Servidor, sizeof(Servidor));
      listen(Escoltar, 10);
      int Tamany = sizeof(Servidor);
      while(true)
      {

         if(Connectar = accept(Escoltar,(SOCKADDR*)&Servidor,&Tamany))
         {
             if(WSAStartup(Versio, &wsa)==NO_ERROR)
                  {
             while(true)
             {


         long reb;
         long env;
         //char *rebre = new char(10002);
         char rebre[100];
         memset(rebre,0,99);
               int i = 2000;
               setsockopt(Connectar,SOL_SOCKET,SO_RCVTIMEO,(const char *)&i,sizeof(i));
            reb = recv(Connectar, rebre,sizeof(rebre) ,0);
            if(reb == -1)
            {
                                       //salta el codigo siempre aquí
                system("pause");
            }
                env = send( Connectar, "M5V", 4, NULL );
                if(strcmp(rebre,"MD5")==0)
                {
                    system("pause");
                }
            if(strlen(rebre) > 2)
            {
               // system("pause");
            }
            if(strlen(rebre) < 2)
            {
                Connectat++;
                if (Connectat == 5)
                {
                SD.Estat(0);
                goto Tornemi;
                }
            }
            if(reb == 0)
            {
                SD.Estat(0);
                goto Tornemi;
            }
            else
            {
                    SD.Estat(1);
            }
                    char *Obtingut;
                    Obtingut = SD.Llegir();

             if(strlen(Obtingut) > 0)
             {
                 //SD.Estat(1);
             send( Connectar, Obtingut, strlen(Obtingut), 0 );
             SD.Esborrar();
             }
             else
             {
              send(Connectar, "M5V",4 ,NULL);
             }
            if(strcmp(rebre,"M5V")==0)
            {
                SD.Estat(1);
                system("pause");
                    memset(rebre,0,10000);
               Connectat = 0;
            }
            else
            {
                send( Connectar, "M5V", 4, 0 );
                if(strcmp(rebre,"M5V")==1 && strcmp(rebre,"")==1)
                {

                }
            }

             }
         }
         }
      }
      return 0x0;



}


CLIENTE:

#define _WIN32_WINNT 0x501
#include <windows.h>
#include <winsock2.h>
#pragma comment( lib, "ws2_32.lib" )
#include "ws2tcpip.h"

WSAData wsa;
   WORD Versio = MAKEWORD(2,1);
   WSAStartup(Versio, &wsa);
   SOCKADDR_IN Client;
   Client.sin_addr.s_addr = inet_addr("192.168.1.13");
   Client.sin_family = AF_INET;
   Client.sin_port = htons(800);
   SOCKET Connectar;
    int Connectat;
        Connectat = 0;
        while(true)
   {
   Connectar = socket(AF_INET, SOCK_STREAM, NULL);
      if(connect(Connectar,(SOCKADDR*) &Client, sizeof(Client)))
      {
         while(true)
         {
         long reb;
         long env;
         char rebre[100];
         memset(rebre,0,100);
               int i = 2000;
               setsockopt(Connectar,SOL_SOCKET,SO_RCVTIMEO,(const char *)&i,sizeof(i));
            reb = recv(Connectar, rebre,sizeof(rebre) ,0);
              env = send(Connectar, "M5V",4 ,NULL);
                if(reb == -1)
            {
                system("pause");
            }
            if(strlen(rebre) < 1)
            {
                //system("pause");
                Connectat++;
                if (Connectat == 5)
                {
                    //system("pause");
                    Connectat = 0;
                        break;
                }
            }
            if(strcmp(rebre,"M5V")==0)
            {
                system("pause");
                send(Connectar, "M5V",4 ,NULL);
                memset(rebre,0,10001);
                Connectat = 0;
            }
         }
      }

    }
      return 0x0;
}
Los virus informaticos son como las personas, hacen lo posible para destruir y hacen lo impossible para no ser destruidos... - ApOkAlizE