ho semi risolto, ora pero mi da connection ok ma nientaltro su linux e niente di niente su win:
codice:/// The Os inclusion #ifdef WINDOWS #include <Winsock2.h> #include <windows.h> #else #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #endif #include <string> class WinClientSock { std::string addr; #ifdef WINDOWS SOCKET sock_fd; /// the win socket #else int sock_fd; /// the lin socket #endif struct sockaddr_in temp; /// the sockaddr structure struct hostent *h; /// the host structure int port; public: WinClientSock(int port); WinClientSock(const std::string addr, int port); ~WinClientSock(); int Open(); void Exit(); const char *getHost() { return addr.c_str(); }; const int getPort() { return port; }; int Receve(char *buf); int Send(char * buff); }; WinClientSock::WinClientSock(int port) { this->port = port; } WinClientSock::WinClientSock(const std::string addr, int port) { this->port = port; this->addr = addr; } WinClientSock::~WinClientSock() { Exit(); } int WinClientSock::Open() { int ret; #ifdef WINDOWS WSADATA wsaData; WORD version; int error; version = MAKEWORD( 2, 0 ); error = WSAStartup( version, &wsaData ); /* check for error */ if ( error != 0 ) { return -1; } /* check for correct version */ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) { WSACleanup(); return -1; } sock_fd = socket( AF_INET, SOCK_STREAM, 0 ); h = gethostbyname(addr.c_str()); temp.sin_family = AF_INET; temp.sin_addr.s_addr = ((struct in_addr *)(h->h_addr))->s_addr; temp.sin_port = htons(port); if ( connect( sock_fd, (sockaddr*)&temp, sizeof(temp) ) == SOCKET_ERROR ) { /* could not connect to server */ ret = -1; } else { ret = sock_fd; } #else temp.sin_family = AF_INET; temp.sin_port = htons(port); h = gethostbyname(addr.c_str()); if (0 == h) return -1; bcopy(h->h_addr,&temp.sin_addr,h->h_length); sock_fd = socket(AF_INET,SOCK_STREAM,0); int errore = connect(sock_fd,(struct sockaddr*) &temp, sizeof(temp)); if(errore == 0) { ret = sock_fd; } else { ret = -1; } #endif return ret; } void WinClientSock::Exit() { #ifdef WINDOWS closesocket(sock_fd); WSACleanup(); #else ///close(sock_fd); #endif } int WinClientSock::Receve(char *buf) { if(recv(sock_fd, buf, strlen(buf), 0 ) == 0) { return -1; } } int WinClientSock::Send(char *buf) { if(send(sock_fd, buf, strlen(buf), 0 ) == 0) { return -1; } }

Rispondi quotando