socket : send



  • ich möchte einen vordefinierten string in einem array an einen clienten schicken.

    wie ist dies möglich? kenne es bis jetzt nur mit revc = send

    Danke MARK



  • send() 😕



  • ja das ist klar. ich wollte gerne ein beispiel 😃



  • achso 🤡
    schau mal hier http://www.c-worker.ch/ unter Tutorials



  • server:

    strcpy(bufstart,"hi");
    rc2=send(s,bufstart,256,0);
    

    client:

    rc=recv(s,bufstart,256,0);
    

    so hab ich das nun, aber beim clienten kommt nichts an.



  • MARK `er:

    http://www.zotteljedi.de.

    und "nur" ein send bzw. recv genügt nicht, beim verschicken weiss er ja den Zielrechner net.

    lies die zotteljedi-hp genau durch, die beispiele etc. und du wirst es dann sicher verstehen. als weiteres empfehle ich das network book von stevens.



  • ich habe natürlich den rest auch definiert und es so eingebettet, dass es beim starten eines neuen threads geschieht



  • dann hast du irgendwo einen fehler gemacht.



  • hi,

    folgenden code habe ich mir aus diversen tutorials zusammengebastelt.

    die tutorials habe ich unter anderem gefunden bei:

    www.c-workes.ch
    www.zotteljedi.de
    usw.

    der erste teil ist der client. der zweite der server.

    der client ruft einen string vom server ab. in diesem fall die serverzeit. man kann den code entsprechend anpassen.

    die anwendung soll ein kleiner zeitserver abbilden. 😉 ich weiß es gibt ntp, aber in einem geschlossen firmen netz gehts das leider nicht.

    ---------------------------------------- bite here -----------------

    #include <stdio.h>
    #include <winsock.h>
    #include <time.h>
    #include <windows.h>

    #define PORT 54321
    #define BUFFER 1024

    int main(int argc, char **argv)
    {
    // Argument ??
    if(argc < 3)
    {
    printf("usage: %s <server-ip> <wait-time in seconds>\n\n", argv[0]);
    printf("\texample: %s 192.168.178.1 10\n", argv[0]);

    exit(0);
    }

    while(1)
    {
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if(iResult != NO_ERROR)
    {
    fputs("Fehler WSAStartup\n", stdout);
    exit(0);
    }
    else
    {
    fputs("WSAStartup OK\n", stdout);
    }

    SOCKET m_socket;
    m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(m_socket == INVALID_SOCKET)
    {
    fputs("Fehler Socket\n", stdout);
    }
    else
    {
    fputs("Socket OK\n", stdout);
    }

    struct sockaddr_in client;
    client.sin_family = AF_INET;
    client.sin_addr.s_addr = inet_addr(argv[1]);
    client.sin_port = htons(PORT);
    if(connect(m_socket, (SOCKADDR*)&client, sizeof(client)) < 0)
    {
    fputs("Fehler Connect\n", stdout);
    WSACleanup();
    exit(0);
    }
    else
    {
    fputs("Connect OK\n", stdout);
    }

    char recvbuf[BUFFER] = "";
    int bytesRecv = recv(m_socket, recvbuf, BUFFER, 0);
    fputs(recvbuf, stdout);

    char string[12];
    sprintf(string, "time %s", recvbuf);
    //printf("%s\n", string);
    system(string);

    // Aufräumen
    closesocket(m_socket);
    WSACleanup();

    fputs("DisConnect OK\n", stdout);

    printf("\nSynchronisation in %s Sekunden.\n", argv[2]);
    fputs("EXIT with STRG-C\n\n", stdout);

    Sleep(1000*(atol(argv[2])));
    }
    return 0;
    }

    ---------------------------------------- bite here -----------------

    #include <stdio.h>
    #include <winsock.h>
    #include <time.h>
    #include <string.h>

    #define PORT 54321
    #define BUFFER 1024

    int main(void)
    {
    SOCKET tempSocket;

    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if(iResult != NO_ERROR)
    {
    fputs("Fehler WSAStartup\n", stdout);
    exit(0);
    }
    else
    {
    fputs("WSAStartup OK\n", stdout);
    }

    SOCKET m_socket;
    m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(m_socket == INVALID_SOCKET)
    {
    fputs("Fehler Socket\n", stdout);
    }
    else
    {
    fputs("Socket OK\n", stdout);
    }

    struct sockaddr_in server, client;
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons(PORT);
    if(bind(m_socket, (SOCKADDR*)&server, sizeof(server)) < 0)
    {
    fputs("Fehler Connect\n", stdout);
    WSACleanup();
    exit(0);
    }
    else
    {
    fputs("Connect OK\n", stdout);
    }

    if(listen(m_socket, 1) == SOCKET_ERROR)
    {
    fputs("Fehler listen\n", stdout);
    WSACleanup();
    exit(0);
    }
    else
    {
    fputs("listen OK\n", stdout);
    }

    char sendbuf[BUFFER] = "";
    //int bytesSend;
    while(1)
    {
    fputs("\nWaiting......\n", stdout);
    fputs("EXIT with STRG-C\n\n", stdout);
    tempSocket = SOCKET_ERROR;

    while(tempSocket == SOCKET_ERROR)
    {
    int len = sizeof(client);
    tempSocket = accept( m_socket, (struct sockaddr*)&client, &len );
    }

    fputs("Client connect ... ", stdout);
    printf("Sende Zeit an: %s\n", inet_ntoa(client.sin_addr));

    struct tm *tmnow;
    time_t tnow;
    time(&tnow);
    tmnow = localtime(&tnow);
    printf("%d.%d.%d\n", tmnow->tm_hour, tmnow->tm_min, tmnow->tm_sec);

    char string[12];
    sprintf(string, "%d.%d.%d\n", tmnow->tm_hour, tmnow->tm_min, tmnow->tm_sec);
    send(tempSocket, string, strlen(string), 0);

    closesocket(tempSocket);
    fputs("Client disconnect ... \n", stdout);

    }

    // Aufräumen
    closesocket(m_socket);
    WSACleanup();
    return 0;
    }

    ---------------------------------------- bite here -----------------


Anmelden zum Antworten