Problem mit Socket2



  • Hi,
    im folgenden benutze ich C, anstatt C++, weils in der msdn so steht und weil ich testen wollte ob in C die gleichen fehler auftreten ;).

    Ich hab mal die code beispiele fuer einen server und einen client aus der msdn genommen, funzt auch alles ganz gut. Blos beim Server bekomm ich den Compile/Link fehler:

    E:\Developing\Dev-Cpp\Projekte\Server\SerMain.cpp [Warning] converting of negative value `-0x000000001' to `SOCKET'
    

    an der codestelle: 7

    1: SOCKET AcceptSocket;
    2:    
    3:     while(1)
    4:     {
    5:             AcceptSocket = SOCKET_ERROR;
    6:             while(AcceptSocket == SOCKET_ERROR)
    7:                                AcceptSocket = accept(m_socket, 0, 0);
    8:             cout << "Client Connected..." << endl;
    9:             m_socket = AcceptSocket;
    10:            break;
    11:    }
    

    Wenn ich die Zeile trotzdem Compile funzt es auch bis auf das dann beim client der hexwert, welcher im error des Compiler/Linker steht, ankommt (-1).

    Dann wuerd ich gern noch wissen wie ich die gesendeten daten welche im form eines char arrays vorliegen auch als 'character' ausgeben kann und nicht die groesse in bytes?

    int bytesSent;
        int bytesRecv = SOCKET_ERROR;
        char sendbuf[32] = "Server: Sending Data.";
        char recvbuf[32] = "";
    
        bytesRecv = recv(m_socket, recvbuf, 32, 0);
        printf( "Bytes Recv: %ld\n", bytesRecv);
    
        bytesSent = send(m_socket, sendbuf, strlen(sendbuf), 0);
        printf( "Bytes Sent: %ld\n", bytesSent );
    
        return 0;
    

    mfg enA



  • Also ich hab mir ebn mal die winsock2.h angeschaut und festgestellt das SOCKET als u_int deklariert ist was dann wohl soviel wie unsigned int heisst und somit keine negativen werte annehmen kann.
    Wie loese ich nun das Problem bis auf das ich vielleicht noch ne variable anlege die signed ist?
    Wieso schreiben die das dann aber so in der msdn?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • SOCKET_ERROR ist falsch, du musst INVALID_SOCKET nehmen!
    1 char ist sowieso 1 Byte groß, Umrechnung kannst du dir sparen 😉
    Ansonsten: AnzahlZeichen=AnzahlBytes/GrößeProZeichen
    quasi n=bytesRecv/sizeof(char)



  • Hallo,
    wie kann ich einen array deklarieren der an die Funktion inet_addr uebergeben werden kann? inet_addr erwartet einen const char* zb. inet_addr = ("127.0.0.1"). ich will diesen aber variabel halten bzw. vor dem verbinden eingeben koennen. mit char IP[] = {1, 2, 7, ., 0, ., 0, ., 1} funktioniert es zb nicht! Gibt es vielleicht noch eine andere Funktion?

    mfg enA



  • gethostbyname:

    http://www.c-worker.ch/tuts/resolv.html

    ganz gut erklärt, allerdings habe ich irgendwo mal gehört, dass es da wohl ne neuere Version von gibt



  • Caste doch einfach deine als Char-Array zusammengebaute IP auf nen (const char*).
    Das const sagt eh nur aus, dass inet_addr() die zeichenkette, die du übergibst nicht verändern wird...


Anmelden zum Antworten