[Erledigt]Netzwerkkomunikation Problem

  • geschlossen
  • C

  • obi--wan
  • 773 Aufrufe 0 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Erledigt]Netzwerkkomunikation Problem

    Allso ich bin grad dabei ein Programm in C zu schreiben das übers Netztwerk komuniziert. Ich hab beim Server das Problem das ich bei bind() den Fehlercode 10038 zurückbekomme. Hab auch schon gesucht und bei msdn folgendes gefunden:

    WSAENOTSOCK
    10038

    Socket operation on nonsocket.

    An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.


    Das hilft mir in der Fehlerbeseitigung jedoch nicht weiter. Und auch Google hat nichts gefunden.

    Der Source:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <windows.h>
    4. #include <winsock2.h>
    5. #include "mywinsock.h"
    6. int main()
    7. {
    8. SOCKET acceptsocket, sock;
    9. SOCKADDR_IN addr;
    10. long rc = 0;
    11. puts("Warte auf Verbindung");
    12. rc = startWinsock();
    13. if(rc != 0) {
    14. printf("Fehler: startwinsock, fehler code: %d\n",rc);
    15. }
    16. acceptsocket = createSocket;
    17. if(rc == SOCKET_ERROR) {
    18. puts("fehler beim createn");
    19. }
    20. rc = bindSocket(sock, addr, 12345);
    21. if(rc == SOCKET_ERROR) {
    22. printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
    23. }
    24. rc = listen(acceptsocket, 10);
    25. if(rc == SOCKET_ERROR) {
    26. puts("Fehler beim listen");
    27. }
    28. sock = accept(acceptsocket, NULL, NULL);
    29. if(rc == INVALID_SOCKET) {
    30. puts("Verbindung fehlgeschlagen");
    31. }
    32. else {
    33. puts("Verbindung hergestellt");
    34. }
    35. closesocket(acceptsocket);
    36. closesocket(sock);
    37. WSACleanup();
    38. system("pause");
    39. return 0;
    40. }
    Alles anzeigen


    Das Headerfile "mywinsock.h":

    Quellcode

    1. #ifndef winsock_h
    2. #define winsock_h
    3. int bindSocket(SOCKET sock, SOCKADDR_IN address, int port);
    4. SOCKET createSocket(void);
    5. int connectSocket(SOCKET sock, SOCKADDR_IN address, char ip[], int port);
    6. int startWinsock(void);
    7. int bindSocket(SOCKET sock, SOCKADDR_IN address, int port) {
    8. memset(&address,0,sizeof(SOCKADDR_IN));
    9. address.sin_family=AF_INET;
    10. address.sin_port=htons(port);
    11. address.sin_addr.s_addr=ADDR_ANY;
    12. return bind(sock,(SOCKADDR*)&address,sizeof(SOCKADDR_IN));
    13. }
    14. SOCKET createSocket(void) {
    15. return socket(AF_INET,SOCK_STREAM,0);
    16. }
    17. int startWinsock(void) {
    18. WSADATA wsa;
    19. return WSAStartup(MAKEWORD(2,0),&wsa);
    20. }
    21. int connectSocket(SOCKET sock, SOCKADDR_IN address, char ip[], int port) {
    22. memset(&address,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
    23. address.sin_family=AF_INET;
    24. address.sin_port=htons(port); // wir verwenden mal port 12345
    25. address.sin_addr.s_addr=inet_addr(ip); // zielrechner ist unser eigener
    26. return connect(sock,(SOCKADDR*)&address,sizeof(SOCKADDR));
    27. }
    28. #endif
    Alles anzeigen


    Compiler is GCC 3.4 mit Code:Blocks als IDE.

    edit:

    Hat sich erledgt. Äuserst peinlicher Feher!

    Hab hier:

    Quellcode

    1. acceptsocket = createSocket;

    die Klammern Vergessen.

    Und Hier:

    Quellcode

    1. bindSocket(sock, addr, 12345);

    hätte der acceptsocket hergehört und nicht der connectionsocket.

    mfg
    obi--wan

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von obi--wan ()