socketfehler 10054



  • Auf jeden Fall solltest du mal deine Array-Größe kontrollieren - der Text "juhuhu dateiuebertragung" passt niemals in ein 12-Zeichen-Array (was bedeutet, alles ab dem 'i' überschreibt irgendwelche benachbarten Stack-Bereiche).

    (btw, woher kommt da eigentlich die 9?)



  • so..

    hab das jetzt geändert.. aber es kommt immer noch der fehler. (jetz hatte ich zum erstenmal einen buchstaben (R), sonst warns symbole xD)

    daran scheint es nicht zu liegen.

    könnte das vllt ein firewall problem sein?

    PS: die 9 kommt noch aus dem tutorial, war da ne beispielzahl 😛



  • Vieleicht liegt es daran das du in dein 12 Zeichen großes char Array einen viel zu langen text reinkopierst. Wenn du char benutzen willst (std::string wäre besser) dann probiere es mal so:

    char buf [256];
    strcpy(buf, "juhuhu dateiuebertragung");
    rc=send(acceptSocket, buf, strlen(buf) + 1, 0); // strlen() + 1 für '\0'
    if (rc ==SOCKET_ERROR) 
    {
        cout<<"Fehler beim senden."<<WSAGetLastError()<<endl;
        return 1;
    } else 
    {
        cout<<"Gesendet"<<endl;
    }
    


  • das hatte ich schon erledigt.

    mhh, wie würde das denn mit string aussehn? da sagt der doch best. i-was vonwegen konvertierung wenn ich da jetz einfach strings für einsetze?



  • string buf = "juhuhu ...";
    rc = send(acceptSocket, buf.c_str(),buf.length()+1,0);
    ...
    

    (auf der Empfänger-Seite kannst du leider keinen String als Ziel angeben - außer du packst dir eine passende Hilfsfunktion um recv() herum)



  • also i-was funzt hier nich..

    ich habs mir nochma angesehn.. und wahrscheinlich was Übersehn..
    wenn ich den server anmache, wartet der auf den client. dieser erstellt eine verbindung zum serv

    dann passierts: der server stürzt ab... und ich hab kein haltepunkt gehabt -> keinen fehlercode..
    also: beim serv is der fehlercode 10057.

    das müsste jetz aber weiterhelfen denk ich xD

    *ich idiot*

    greets



  • socket not connected..

    hier mein code:

    connectedSocket=accept(acceptSocket,NULL,NULL);
    	if(connectedSocket==INVALID_SOCKET) {
    		printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
    		return 1;
    		} else {
    			printf("Neue Verbindung wurde akzeptiert!\n");
    			}
    

    bis dahin funzt es denk ich

    er sagt auch noch "neue verb. wurde akzeptiert"..

    mh aber dann fehler beim senden.. wtf?



  • poste mal den ganzen server code...



  • #include <windows.h>
    #include <winsock2.h>
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    //Prototypen
    int startWinsock(void);
    
    int main() {
    	long rc;
    	SOCKET acceptSocket;
    	SOCKET connectedSocket;
    	SOCKADDR_IN addr;
    	// Winsock starten
    	rc=startWinsock();
    	if(rc!=0) {
    		printf("Fehler: startWinsock, fehler code: %d\n",rc);
    		return 1;
    		} else {
    			printf("Winsock gestartet!\n");
    			}
    	// Socket erstellen
    	acceptSocket=socket(AF_INET,SOCK_STREAM,0);
    	if(acceptSocket==INVALID_SOCKET) {
    		printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    		return 1;
    		} else {
    			printf("Socket erstellt!\n");
    			}
    	memset(&addr,0,sizeof(SOCKADDR_IN));
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(12345);
    	addr.sin_addr.s_addr=ADDR_ANY;
    	rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
    	if(rc==SOCKET_ERROR) {
    		printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
    		return 1;
    		} else {
    			printf("Socket an port 12345 gebunden\n");
    			}
    	rc=listen(acceptSocket,10);
    	if(rc==SOCKET_ERROR) {
    		printf("Fehler: listen, fehler code: %d\n",WSAGetLastError());
    		return 1;
    		} else {
    			printf("acceptSocket ist im listen Modus....\n"); 
    			}
    	connectedSocket=accept(acceptSocket,NULL,NULL);
    	if(connectedSocket==INVALID_SOCKET) {
    		printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
    		return 1;
    		} else {
    			printf("Neue Verbindung wurde akzeptiert!\n");
    			}
    //char buf [256];
    //strcpy(buf, "juhuhu dateiuebertragung");
    //rc=send(acceptSocket, buf, strlen(buf) + 1, 0); // strlen() + 1 für '\0'
    string buf = "juhuhu ...";
    rc = send(acceptSocket, buf.c_str(),buf.length()+1,0);
    if (rc ==SOCKET_ERROR)
    {
        cout<<"Fehler beim senden."<<WSAGetLastError()<<endl;
        cin.get();
        cin.get();
        return 1;
    } else
    {
        cout<<"Gesendet"<<endl;
    }
    	cin.get();
    	cin.get();
    	closesocket(acceptSocket);
    	WSACleanup();
    	cin.get();
    	cin.get();
    	return 0;
    }
    
    int startWinsock(void) {
    	WSADATA wsa;
    	return WSAStartup(MAKEWORD(2,0),&wsa);
    	}
    

    da isser



  • hokage schrieb:

    #include <windows.h>
    #include <winsock2.h>
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    ...
    

    da isser

    Was mir als erstes auffällt ist, ist das fehlende #include <string>...

    Edit:
    Mit
    [cpp]rc = send(connectedSocket, buf.c_str(),buf.length(),0); [/cpp]
    geht es.



  • Der Fehler liegt wahrscheinlich hier:

    connectedSocket=accept(acceptSocket,NULL,NULL);
    if(connectedSocket==INVALID_SOCKET) 
    {
       printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
       return 1;
    } 
    else 
    {
       printf("Neue Verbindung wurde akzeptiert!\n");
    }
    //char buf [256];
    //strcpy(buf, "juhuhu dateiuebertragung");
    //rc=send(acceptSocket, buf, strlen(buf) + 1, 0); // strlen() + 1 für '\0'
    string buf = "juhuhu ...";
    //rc = send(acceptSocket, buf.c_str(),buf.length()+1,0);
    rc = send(connectedSocket, buf.c_str(),buf.length()+1,0); //<- mit dem von accept() erstellten socekt die daten senden
    


  • leute!

    ihr seid klasse!

    vielen dank für die hilfe so funktionierts 😃
    greets



  • okayy, noch eine frage..

    wenn ich jetz beim server sowas einfüge:

    string buf;// = "meine nachricht an dich";
    cout<<"NAchricht eingeben"<<endl;
    cin>>buf;
    rc = send(connectedSocket, buf.c_str(),buf.length()+1,0);
    

    also die nachricht eingeben lasse.. dann kommt imma nur alles bis zum ersten leerzeichen an... dann nichts mehr.. woran liegt des?

    greets



  • Das liegt daran, daß cin Leerzeichen als Eingabeende einstuft (und nur den Text bis zum ersten Leerzeichen in buf speichert). Wenn du die komplette Zeile einlesen willst, nimm getline().


Anmelden zum Antworten