Título: ¿Ayuda con sockets C++? Publicado por: ApOkAlizE en 7 Octubre 2012, 02:36 am 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. Título: Re: ¿Ayuda con sockets C++? Publicado por: Anvil en 7 Octubre 2012, 04:35 am El compilador de Visual Studio es distinto al de CodeBlocks, revisa que no te esten faltando librerías.
Título: Re: ¿Ayuda con sockets C++? Publicado por: oPen syLar en 7 Octubre 2012, 06:09 am 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 =) Código: man strerror Título: Re: ¿Ayuda con sockets C++? Publicado por: ApOkAlizE en 8 Octubre 2012, 00:13 am oPen sYlar he provado con strerror y devuelve la cadena de "result too large"...
Título: Re: ¿Ayuda con sockets C++? Publicado por: ApOkAlizE en 8 Octubre 2012, 00:56 am 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; } |