Bonjour ,
je suis actuellement ce cours : https://bousk.developpez.com/cours/reseau-c++/
et j'en suis à la première partie sur le TCP.
Mon problème est que quand je lance le programme , il fonctionne mais à la fin cesse de fonctionner. J'ai essayé de supprimer des choses dans le main et de voir d'où vient le problème et apparemment c'est du constructeur du socket mais pourtant j'ai écris la même chose que dans le cours.

main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
#include <iostream>
#include <winsock2.h>
#include <string>
#include "Sockets.h"
#include "TCPSocket.h"
 
int main()
{
    if(!Sockets::Start())
    {
        std::cout << "Erreur inisialisation: " << Sockets::getError() << std::endl;
        return 1;
    }
 
    TCPSocket s;
 
 
    if(!s.Connect("127.0.0.1",42))
    {
        std::cout << "Erreur connexion serveur : " << Sockets::getError() << std::endl;
        return 1;
    }
 
    std::string answer;
 
    s.~TCPSocket();
    Sockets::Release();
    return 0;
 
}
Sockets.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
#ifndef SOCKETS_H_INCLUDED
#define SOCKETS_H_INCLUDED
 
#ifdef _WIN32
#if _MSC_VER >= 1800
#include <WS2tcpip.h>
#else
#define inet_pton(FAMILY,IP,PTR_STRUCT_SOCKADDR) (*(PTR_STRUCT_SOCKADDR)) = inet_addr((IP))
typedef int socklen_t;
#endif // _MSC_VER
#include <WinSock2.h>
#ifdef _MSC_VER
#if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE
//Win 8.1 & +
#pragma comment(lib,"Ws2_32.lib")
#else
#pragma comment(lib,"wsock32.lib")
#endif // _WIN32_WINNT
#endif // _MSC_VER
#else
#include <sys/socket.h>
#include <netinet/in.h> //sockaddr_in , IPPROTO_TCP
#include <arpa/inet.h> //hton* , ntoh* , inet_addr
#include <unistd.h> //close
#include <cerrno> //errno
#define SOCKET int
#define INVALID_SOCKET ((int)-1)
#endif // _WIN32
 
namespace Sockets
{
    bool Start();
    void Release();
    int getError();
    void closeSocket(SOCKET socket);
}
 
 
#endif // SOCKETS_H_INCLUDED
Sockets.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
#include "Sockets.h"
 
namespace Sockets
{
 
    bool Start()
    {
        #ifdef _WIN32
        WSADATA data;
        return WSAStartup(MAKEWORD(2,2),&data) == 0;
 
        #else
        return true;
        #endif // _WIN32
    }
    void Release()
    {
        #ifdef _WIN32
        WSACleanup();
        #endif // _WIN32
    }
    int getError()
    {
        #ifdef _WIN32
        return WSAGetLastError();
 
        #else
        return errno;
 
        #endif // _WIN32
 
    }
    void closeSocket(SOCKET socket)
    {
        #ifdef _WIN32
 
        closeSocket(socket);
 
        #else
 
        close(socket);
 
        #endif // _WIN32
    }
 
 
}
TCPSocket.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
#ifndef TCPSOCKET_H_INCLUDED
#define TCPSOCKET_H_INCLUDED
 
#include "Sockets.h"
#include <string>
#include <sstream>
 
class TCPSocket
{
 
    public:
    TCPSocket();
    ~TCPSocket();
    bool Connect(const std::string& ipAdress,unsigned short port);
 
    private:
    SOCKET Socket;
 
 
 
};
 
 
#endif // TCPSOCKET_H_INCLUDED
TCPSocket.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
#include "TCPSocket.h"
 
TCPSocket::TCPSocket()
{
    Socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(Socket == INVALID_SOCKET)
    {
        std::ostringstream error;
        error << "Erreur inisialisation : " << Sockets::getError();
        throw std::runtime_error(error.str());
    }
}
TCPSocket::~TCPSocket()
{
    Sockets::closeSocket(Socket);
}
bool TCPSocket::Connect(const std::string& ipAdress,unsigned short port)
{
    sockaddr_in server;
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    server.sin_family = AF_INET;
    server.sin_port = htons(port);
    return connect(Socket,(struct sockaddr*)&server,sizeof(server)) == 0;
}
Merci d'avance.