tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1044
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    paul10 paul10 ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    21
    Hallo,
    vorweg ich habe erst mit der Netzwerkprogrammierung angefangen und versuche jetzt einen Server zu machen, der einfach Daten enfängt, es geht bis bind gut, aber dann trifft ein Fehler auf den ich einfach nicht komme ( WSAGetLastError gibt bei bind 10038 zurück ) :
    Code :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    
    #include <io.h>
    #include <iostream>
    #include <cstring>
    #include <string>
    #include <winsock.h>
    #include "socket.h"
     
    using namespace std;
    // Verbindung zu Winsock.dll herstellen
    void Socket::wsastartup( WORD wVersion, WSADATA& wsaData ){
        if ( WSAStartup ( wVersion, &wsaData ) != 0 ) {
            cout << "Fehler bei WSAStartup!\nDas Programm muss beendet werden!\n";
            cout << WSAGetLastError();
            exit ( 1 );
        }
    }
     
    // Den Socket erzeugen
    int Socket::socket ( ) {
        if ( sock = ::socket( AF_INET, SOCK_STREAM, 0 ) == SOCKET_ERROR ) {
            cout << "Fehler bei socket!\nDas Programm muss beendet werden!\n";
            cout << WSAGetLastError( ) << endl;
            system( "PAUSE" );
            exit ( 1 );
            return -1;
        }else 
            return sock;
     
    }
     
    // Socket an einen Server binden
    bool Socket::bind( const int port){
        int bind_return;
        m_addr.sin_family = AF_INET;
        m_addr.sin_port = htons ( port );
        m_addr.sin_addr.s_addr = INADDR_ANY; 
        cout << "sock : " << sock <<endl;
        system( "PAUSE" );
        system( "PAUSE" );
        bind_return = ::bind ( sock, ( struct sockaddr * ) &m_addr, sizeof ( m_addr ) );
        if ( bind_return == SOCKET_ERROR ) {
            cout << "Fehler bei bind!\nDas Programm muss beendet werden!\n";
            cout << WSAGetLastError () << endl;
            system ( "PAUSE" );
            exit ( 1 );
            return false;
        }else
            return true;
        
    }   
     
    // Einen Port abhören
    void Socket::listen( const int MAXCONNECTIONS) {
        if ( ::listen ( sock, MAXCONNECTIONS ) == SOCKET_ERROR ){
            cout << "Fehler bei listen!\nDas Programm muss beendet werden!\n";
            cout << WSAGetLastError ( ) << endl;
            system ( "PAUSE" );
            exit ( 1 );
        }
    }
     
    // Eine Warteschlange einrichten
    void Socket::accept ( Socket& new_socket ) {
        int addrlen = sizeof ( m_addr );
        if ( new_socket.sock = ::accept ( sock, ( sockaddr * ) &m_addr, ( int * ) &addrlen ) ) {
            cout << "Fehler bei accept!\nDas Programm muss beendet werden!\n";
            cout << WSAGetLastError ( ) << endl;
            system ( "PAUSE" );
            exit ( 1 );
        }
    }
     
    // Daten entfangen
    void Socket::recv ( string& s ) {
        string buf;
        int recv;
        if ( recv = ::recv ( sock,( char * ) buf.c_str(), buf.size(), 0 ) == SOCKET_ERROR ) { 
            cout << "Fehler bei recv!\nDas Programm muss beendet werden!\n";
            cout << WSAGetLastError ( ) << endl;
            system ( "PAUSE" );
            exit ( 1 );
        }
        else 
            s = buf;
        }
     
    // Socketschließen
    void Socket::close( ) {
        closesocket( sock );
        }
     
    // WSACleanup : Verbindung zur Winsock.dll beenden
    void Socket::CleanUp( ) {
        WSACleanup( );
        }

    ich hoffe ihr könnt mir helfen

    Danke im vorraus

    Gruß
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.800
    Blog-Einträge
    5
    Zitat Zitat von paul10 Beitrag anzeigen
    Code :
    1
    
        if ( sock = ::socket( AF_INET, SOCK_STREAM, 0 ) == SOCKET_ERROR ) {
    == bindet stärker als =, die Zeile ist also gleichbedeutend mit
    Code :
    1
    
        if ( sock = (::socket( AF_INET, SOCK_STREAM, 0 ) == SOCKET_ERROR) ) {
    , richtig wäre allerdings
    Code :
    1
    
        if ( (sock = ::socket( AF_INET, SOCK_STREAM, 0 )) == SOCKET_ERROR ) {
    .

    Grüße, Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    paul10 paul10 ist offline Mitglied
    Registriert seit
    Apr 2009
    Beiträge
    21
    hmm, blöder Fehler der mir da passiert ist , aber vielen vielen Dank .
    Du hast meine Sorgen gelöst

    Gruß
     

Ähnliche Themen

  1. bind() address already in use
    Von extexo im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 20.08.09, 21:00
  2. Apache startet nicht. Fehler: could not bind
    Von fanste im Forum Hosting & Webserver
    Antworten: 7
    Letzter Beitrag: 04.05.06, 15:52
  3. bind()
    Von coolfire im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 17.02.04, 15:20
  4. Probleme mit DNS (bind 9)
    Von juhu im Forum Netzwerke
    Antworten: 3
    Letzter Beitrag: 27.06.03, 10:43
  5. Bind Dns [8|9]
    Von lexi im Forum Netzwerke
    Antworten: 2
    Letzter Beitrag: 10.02.02, 11:34