[C++] Sever Problem

02/12/2012 15:07 yihaaa#1
Hallo Leute,
ich habe ein Problem mit einem Server. Ich bekomme Bei jeder Funktion einen Error Code, weiß jedoch nicht woran es liegt.
Ich poste einfach mal meinen Code:
Ich habe einfach die Vorlage von MSDN genommer und angepsst.
Code:
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>

#pragma comment(lib, "Ws2_32.lib")

using namespace std;

int main( int arg, char* arvg[ ] )
{

    WSADATA wsaData;
    int iResult = WSAStartup( MAKEWORD( 2, 0 ), &wsaData );
    if( iResult != NO_ERROR )
	{
		cout << "WSAStartup failed! Error Code: " << WSAGetLastError( ) << endl;
    }
    //----------------------
    // Create a SOCKET for listening for
    // incoming connection requests.
    SOCKET ListenSocket;
	ListenSocket = socket( AF_INET, SOCK_DGRAM, IPPROTO_IP );
    if( ListenSocket == INVALID_SOCKET )
	{
        cout << "Socket failed! Error Code: " << WSAGetLastError( ) << endl;
        WSACleanup( );
        return 1;
    }
    //----------------------
    // The sockaddr_in structure specifies the address family,
    // IP address, and port for the socket that is being bound.
    sockaddr_in service;
    service.sin_family = AF_INET;
	char ip[ ] = "127.0.0.1/0";
    service.sin_addr.s_addr = inet_addr( reinterpret_cast< const char* >( &ip ) );
    service.sin_port = ntohs( 2011 );

    if( bind( ListenSocket, reinterpret_cast< SOCKADDR* >( &service ), sizeof ( service ) ) == SOCKET_ERROR )
	{
        cout << "Bind failed! Error Code: " << WSAGetLastError( ) << endl;
        closesocket( ListenSocket );
        WSACleanup( );
        return 1;
    }
    //----------------------
    // Listen for incoming connection requests.
    // on the created socket
    if( listen( ListenSocket, 1 ) == SOCKET_ERROR )
	{
        cout << "Listen failed! Error Code: " << WSAGetLastError( ) << endl;
        closesocket( ListenSocket );
        WSACleanup( );
        return 1;
    }
    //----------------------
    // Create a SOCKET for accepting incoming requests.
    SOCKET AcceptSocket;
    cout << "Wait for connection..." << endl;

    //----------------------
    // Accept the connection.
    AcceptSocket = accept( ListenSocket, NULL, NULL );
    if( AcceptSocket == INVALID_SOCKET )
	{
        cout << "Accept failed! Error Code: " << WSAGetLastError( ) << endl;
        closesocket( ListenSocket );
        WSACleanup( );
        return 1;
    }
	else
	{
		cout << "Da ist was... :D" << endl;
	}

    // No longer need server socket
    closesocket( ListenSocket );
    WSACleanup( );
    return 0;
}
MfG
02/12/2012 15:36 .Infinite#2
Guck doch nach was der Error Code bedeutet...
02/12/2012 15:58 yihaaa#3
Habe ich jedoch werde ich nicht schlau darauß.

MfG
02/12/2012 16:21 .Infinite#4
Muss man dir alles aus der Nase ziehen? Schreib doch was für ein Fehler kommt... Sonst kann dir keiner helfen.
02/12/2012 16:29 yihaaa#5
bind error:10049
02/12/2012 17:15 jacky919#6
Quote:
Originally Posted by MSDN
WSAEADDRNOTAVAIL: The requested address is not valid in its context.
?
02/12/2012 17:18 yihaaa#7
Ja, aber warum will ich gerne wissen.

MfG
02/12/2012 17:55 .Infinite#8
Quote:
char ip[ ] = "127.0.0.1/0";
service.sin_addr.s_addr = inet_addr( reinterpret_cast< const char* >( &ip ) );
"ip" ist doch schon ein Zeiger... Du musst das char array nur als const deklarieren. Dann kannstu du dir auch den cast sparen.

Quote:
service.sin_port = ntohs( 2011 );
sollte es nicht htons(...) heißen?

Quote:
Originally Posted by msdn
The htons function converts a u_short from host to TCP/IP network byte order (which is big-endian).
02/12/2012 18:04 BrendonHomo#9
service.sin_addr.s_addr = inet_addr("127.0.0.1");
02/12/2012 19:01 yihaaa#10
@.Infinite: Ja sollte es, aber mein Client benutzt diese Funktion, deshalb habe ich sie auch hier verwendet. Ist das falsch? Ich kenne mich mit Server/Client sachen nicht gut aus.

@BrendonHomo: Ist das gleiche wie das:
Code:
service.sin_addr.s_addr = inet_addr( reinterpret_cast< const char* >( ip ) );
MfG
02/12/2012 20:48 MrSm!th#11
Nein.

Was soll das "/0" am Ende der IP?
02/12/2012 20:58 yihaaa#12
Ok ich habs jetz mal so gemacht:
Code:
const char ip[ ] = "127.0.0.1";
Jetz bekommeich: listen error:10045...

MfG
02/18/2012 18:24 yihaaa#13
Push: Muss ein Server und ein Client die selben Parameter bei der socket Funktion haben?
02/18/2012 18:33 MrSm!th#14
Ja.
02/18/2012 18:38 yihaaa#15
Ok. So sieht der Socket in dem Client aus:
Code:
socket( AF_INET, SOCK_DGRAM, IPPROTO_IP );
Wenn ich jedoch den Socket in dem Sever verwende bekomme ich den Listen Fehler 10045 wieder...
Was ist falsch?

MfG
Edit: Glaub ich habs...