Ho cercato di farmi una lib socket per Lin-Win e questo il risultato:
Il problema è che provandola:codice:/// The Os inclusion #ifdef WINDOWS #include <Winsock2.h> #include <windows.h> #elif #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 #elif int sock_fd; /// the lin socket #endif struct sockaddr_in temp; /// the sockaddr structure struct hostent *h; /// the host structure int port; public: WinClientSock(); 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() { addr = "localhost"; /// defining port #ifdef DEF_PORT port = 6000; #elifdef DEF_PORT port = DEF_PORT; #endif } 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; } #elif 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); 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(); #elif 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; } }
Mi da errore di memoria che doveva essere readcodice:#include <iostream> #include <cstring> #include "WinSockClient.hpp" using namespace std; int main(int argc, char *argv[]) { WinClientSock sk("http://www.ngi.it", 23); SOCKET client = (SOCKET) sk.Open(); if(-1 != client) { cout << "Open Ok \n"; char * buffer = new char[32]; /* if(sk.Receve(buffer) == -1) { cout << "Error in recv\n"; } else { cout << buffer; } */ if(sk.Send(buffer) == -1) { cout << "Error in send\n"; } else { cout << "Ok\n"; } delete[] buffer; } char c; cin >> c; return 0; }
Why???
Tnk 10000000000000


Rispondi quotando