paul10
Mitglied
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 ) :
ich hoffe ihr könnt mir helfen
Danke im vorraus
Gruß
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:
#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ß