rendered paste body#include "socket.h"/* constructeur */c_sock::c_sock(){ #ifdef WIN32 WSADATA Data; WSAStartup (MAKEWORD (2, 2), &Data); #endif m_sock = -1; memset(&m_sin,0,sizeof(SOCKADDR_IN)); m_sockerror[0] = '\0';}/* destructeur */c_sock::~c_sock(){ if (m_sock > 0) { ::closesocket(m_sock); m_sock = -1; } #ifdef WIN32 WSACleanup(); #endif memset(&m_sin,0,sizeof(SOCKADDR_IN)); m_sockerror[0] = '\0';}/* fonction qui copi les erreures */void c_sock::setsockerror(){ strcpy(m_sockerror, strerror(socketerror));}/* initialise la socket */bool c_sock::init(){ m_sin.sin_family = AF_INET; m_sock = socket (AF_INET, SOCK_STREAM, 0); //0 ou IPPROTO_TCP if (m_sock < 0) { setsockerror(); return false; } else return true;}/* défini l'ip */bool c_sock::setadresse(char *buff){ struct hostent *host_ip; m_sin.sin_addr.s_addr = inet_addr(buff); if (m_sin.sin_addr.s_addr == -1) { host_ip = gethostbyname (buff); if (host_ip == NULL) { setsockerror(); return false; } else { memcpy ((char *) &m_sin.sin_addr.s_addr, host_ip->h_addr, host_ip->h_length); return true; } } return true;}/* défini le port */void c_sock::setport(unsigned short port){ m_sin.sin_port = htons(port);}/* défini le port */bool c_sock::setport(char *buffer){ unsigned short int port; for (int i = 0; buffer[i] != 0; i++) if (!isdigit (buffer[i])) { strcpy (m_sockerror, "invalide port"); return false; } port = atoi (buffer); m_sin.sin_port = htons (port); return true;}/* pour se connecter */bool c_sock::connexion(){ if (connect (m_sock, (sockaddr*)&m_sin, sizeof(SOCKADDR_IN)) < 0) { setsockerror(); return false; } return true;}/* pour envoyer */bool c_sock::send(char *buff){ if (::send (m_sock, buff, strlen(buff), 0) < 0) { setsockerror(); return false; } return true;}/* pour recevoir */bool c_sock::recv(char *buff, int len){ m_taille = ::recv(m_sock, buff, len, 0); if(m_taille <= 0) { //<= parce qu'en cas de déco du server, ca renvoi 0 setsockerror(); return false; } else { buff[m_taille] = '\0'; return true; }}/* pour fermer la socket */void c_sock::close(){ if (m_sock > 0) { ::closesocket(m_sock); m_sock = -1; }}/* renvoi m_error */char* c_sock::getsockerror(){ return m_sockerror;}/* retourne m_taille */int c_sock::gettaille(){ return m_taille;}