#include <iostream>
#ifdef linux
#include <sys/socket.h> // socket(), connect()
#include <arpa/inet.h> // sockaddr_in
#else
#include <winsock2.h>
#endif

int main()
{
    using namespace std;

#ifndef linux
    WSADATA w;
    if(int result = WSAStartup(MAKEWORD(2,2), &w) != 0)
    {
        cout << "Winsock 2 konnte nicht gestartet werden! Error #" << result << endl;
        return 1;
    }
#endif

    int Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(Socket == -1)
    {
        cout << "Socket konnte nicht erstellt werden!" << endl;
        return 1;
    }

    sockaddr_in service; // Normale IPv4 Struktur
    service.sin_family = AF_INET; // AF_INET für IPv4, für IPv6 wäre es AF_INET6
    service.sin_port = htons(80); // Das HTTP-Protokoll benutzt Port 80

    string ip;
    cout << "IP: ";
    cin >> ip;

    service.sin_addr.s_addr = inet_addr(ip.c_str());

    int result = connect(Socket, reinterpret_cast<sockaddr*>(&service), sizeof(service));
    if(result == -1)
    {
        cout << "Verbindung fehlgeschlagen!" << endl;
        return 1;
    }

    cout << "Verbindung erfolgreich!" << endl;

#ifdef linux
    close(Socket);
#else
    closesocket(Socket);
#endif
}
