problem mit winsocks

also ich bi ngrad daberi ein kleines client(server projekt zu schreiben dabei soll der server wenn der client conected den inhalt einer textfile an den client schicken. das problem es kommt gar keine verbindung zustande. hier mein code
Code:
 SERVER:
 int winsock()
{
    
    SOCKADDR_IN addr;
    
    rc = startWinsock();
    
    if(rc!=0)
    {
        MessageBox(hwnd, 0, 0, ("Fehler: startWinsocks. fehler code : %i",rc));
        cin.get();
        return 1;
    }
    else
    {
        ;
    }
    acceptSocket=socket(AF_INET,SOCK_STREAM,0);
    
    if(acceptSocket == INVALID_SOCKET)
    {
        MessageBox(0, 0, 0,("Fehler: Der socket konnte nicht erstellt werden fehlercode: %i",WSAGetLastError()));
        cin.get();
    }
    else
    {
        ;
    }
    memset(&addr,0,sizeof(SOCKADDR_IN));

    addr.sin_family=AF_INET;

    addr.sin_port=htons(49152);

    addr.sin_addr.s_addr=inet_addr("192.168.0.74");

    rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));

    if(rc==SOCKET_ERROR)

    {
       return 1;

    }

    else

    {
        ;
    }
    
    rc=listen(acceptSocket,10);

    if(rc==SOCKET_ERROR)

    {
        return 1;
    }

    else

    {
         //cout<<"acceptSocket ist im listen Modus...."<<endl; 
        //cin.get();

    }
    
    connectedSocket=accept(acceptSocket,NULL,NULL);

    if(connectedSocket==INVALID_SOCKET)

    {
        //cout<<"Fehler: accept, fehler code: "<<WSAGetLastError()<<endl;
        //cin.get();
        return 1;

    }

    else
    {
        //cout<<"Neue Verbindung wurde akzeptiert!"<<endl;
        /*cin.get()*/;
    }
    while(rc!=SOCKET_ERROR)
    {
        if(rc==0)
        {
            cout<<"Server hat die Verbindung getrennt.."<<endl;
            break;
        }
        if(rc==SOCKET_ERROR)
        {
            cout<<"Fehler: recv, fehler code: "<<WSAGetLastError();
            break;
        }
        ifstream dat_ein;
        string dateiname = "C:\\log.txt";
        dat_ein.open(dateiname.c_str(), ios_base::in);
    
        if(!dat_ein)
        {
            return -1;
        }
        int i = 0;
        while (!dat_ein.eof())
        {
            dat_ein.get(buffer2[i]);
            ++i;
        }
        dat_ein.close();
        rc=send(connectedSocket,buffer2,strlen(buffer2),0);
    }
    closesocket(acceptSocket);
    closesocket(connectedSocket);
    WSACleanup();
    return 0;
}

CLIENT:
int main()
{
    long rc;
    SOCKET Socket;
    char buffer[256];
    SOCKADDR_IN addr;
    
    rc=startWinsock();
    if(rc!=0)
    {
        cout<<"Fehler startWinsocks Fehlercode "<<rc<<endl;
        cin.get();
        return 1; 
    }
    else
    {
        cout<<"Winsocks gestartet"<<endl;
        cin.get();
    }
    
    Socket=socket(AF_INET,SOCK_STREAM,0);
    
    if(Socket==INVALID_SOCKET)
    {
        cout<<"Fehler Socket konnte nicht erstellt werden fehlercode :"<<WSAGetLastError()<<endl;
        cin.get();
        return 1;
    }

    else
    {
        cout<<"Socket erstellt"<<endl;
        cin.get();
    }
    
    memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 

    addr.sin_family=AF_INET;

    addr.sin_port=htons(49152); // wir verwenden mal port 12345

    addr.sin_addr.s_addr=inet_addr("192.168.0.74"); // zielrechner ist unser eigener
    
    rc=connect(Socket,(SOCKADDR*)&addr,sizeof(SOCKADDR));

    if(rc==SOCKET_ERROR)
    {
        cout<<"Fehler: connect gescheitert fehlercode "<<WSAGetLastError()<<endl;
        cin.get();
        return 1;
    }
    else
    {
        cout<<"verunden mit 192.168.0.74.."<<endl;
        cin.get();
    }
    while(rc!=SOCKET_ERROR)
    {
        if(rc==0)
        {
            cout<<"Server hat die Verbindung getrennt.."<<endl;
            break;
        } 
        if(rc==SOCKET_ERROR)
        {
            cout<<"Fehler: recv, fehler code: "<<WSAGetLastError()<<endl;
            break;
        }
        buffer[rc]='\0';
        rc=recv(Socket,buffer,256,0);
        cout<<endl<<"Server antwortet: "<<buffer<<endl;
    }
    closesocket(Socket);
    WSACleanup();
    return 0;
}
 
1. Lässt sich das ganze überhaupt kompilieren?
2. Wie sieht dein Client aus?
3. Bemüh dich mal um eine lesbare Rechtschreibung. Das ist ja ein grauß
 
2. Wie sieht dein Client aus?

Hat er doch geschrieben !

Da ich momentan kein Windows habe ( also ca. 4 Monate nicht ), versuche dich doch erstmal mit telnet am Server zu verbinden, damit man weiß, was nicht geht : Server oder Client.

Mit deiner Kontruktion kannst du, sowie ich das bis jetzt sehe diesen Server nur einmal benutzen

Code:
connectedSocket=accept(acceptSocket,NULL,NULL);
    if(connectedSocket==INVALID_SOCKET){
        //cout<<"Fehler: accept, fehler code: "<<WSAGetLastError()<<endl;
        //cin.get();
        return 1;

    }
   else{
        //cout<<"Neue Verbindung wurde akzeptiert!"<<endl;
        /*cin.get()*/;
    }
Es ist keine neue, sondern die einzige die der Server je akzeptieren wird. Du musst das mit einer while() Schleife ummanteln.

Es ist ein auch Fehler im Programm, den man so gleich sieht ( bzw. sollte )

Server :

Code:
 int i = 0;
        while (!dat_ein.eof())
        {
            dat_ein.get(buffer2[i]);
            ++i;
        }
        dat_ein.close();
        rc=send(connectedSocket,buffer2,strlen(buffer2),0);

Cient :
Code:
rc=recv(Socket,buffer,256,0);

Woher weiß der Client, wie viel er empfangen soll. RICHTIG. Er weiß es gar nicht. Sowas ist gar nicht schön. Mit dem i im Server code warste schon ganz richtig, ich würde den Wert aber an den Client schicken und dieser soll dann die Anzahl empfangen. Es ist nicht klar, ob mit einem send/recv alles ankommt, daher :

Code:
i = 512;
int p = 0;
do{
        p = recv(socket,buffer,size_z,0);
        i -= p;
        // irgendwas machen
}while(i != 0);
 
Zurück
Oben