Daten per Netzwerk verschicken



  • Kann mir jemand erklären, wie man im netzwerk daten verschicken kann, oder mir ein gutes tutorial empfehlen?



  • Mit Standard C++ geht so was nicht, da muss du schon auf Funktionen von deinen Os zurückgreifen z.b. sockets
    Welches Os benutz du, ich verschiebe dan den Thread da hin.
    Ein paar tuts gibts auf www.c-worker.ch die sind aber in c



  • Ich hab noch win98, das programm soll aber später auf win2000 rechnern laufen. Müsste ich da große unterschiede in der programmierung machen?



  • Original erstellt von TheDeath:
    Ich hab noch win98, das programm soll aber später auf win2000 rechnern laufen. Müsste ich da große unterschiede in der programmierung machen?

    eigentlich nicht, aber sicher bin ich nicht, die Leute im WinApi Forum können da bestimt mehr zu aussagen.

    Verschoben ins WinAPI Forum.



  • Es ist egal ob du dein Programm später auf Windows95, 98, 2000,Me oder Xp ausführst !

    Wenn du mit dem MFC arbeitest guck dir mal die Doku zu CSocket und CAsyncSocket an. Im FAQ sollte aber auch was drüber stehen



  • Ich hab noch mal ne frage, und zwar:

    int bytes
    char puffer[]="Willkommen auf dem Server";
    bytes=send(s,puffer,strlen(puffer),0);
    if(bytes==-1)
    {
    printf("Error, daten nicht verschickt");
    }
    

    die deklaration von send() ist:

    int send(int s, const void *msg, int len, unsigned int flags);
    

    S ist der socket auf dem die daten gesendet werden
    CONST VOID *MSG ist ein zeiger auf die daten, die gesendet werden sollen
    INT LEN ist die länge des bereiches, der gesendet werden soll
    UNSIGNED INT FLAGS gibt flags an

    Ich bekomm aber immer die ausgabe "Error", also wir send() nich richtig ausgeführt und gibt -1 zurück, kann mir jemand helfen das das richtig funktioniert?



  • Hast du connect() und bind() vorher aufgerufen??
    Falls du ein verbindungsloses Protocol benutzt brauchs du kein connect(),
    (glaube ich).



  • Da habt ihr mal den kompletten code:

    #include <winsock.h>
    #include <stdio.h>
    #include <conio.h>
    
    int senden(int m);
    int s, c, retval;
    
    int main(int argc, char *argv[])
    {
        WSADATA was;
    
        struct sockaddr_in cli;
        int cli_size;
    
        struct sockaddr_in serv;
        serv.sin_addr.s_addr=INADDR_ANY;
        serv.sin_port=htons(80);
        serv.sin_family=AF_INET;
    
        fd_set rfds;
        struct timeval tv;
    
        char buffer[]="Willkommenn auf dem Chat-Server\r\n";
    
        FILE *log;
    
        log=fopen("log.txt","w");
        fprintf(log,"This file was build by chat_srv\n\n");
    
        if(WSAStartup(MAKEWORD(1,1),&was))
        {
            fprintf(log,"WSAStartup() failed %lu\n",(unsigned long)GetLastError());
            return EXIT_FAILURE;
        }else fprintf(log, "WSAStartup() successful started\n");
    
        if((s=socket(AF_INET,SOCK_STREAM,0))==-1)
        {
            fprintf(log,"Error, creating socket failed\n");
        }else fprintf(log,"Socket successful created\n");
    
        if(bind(s,(struct sockaddr *)&serv,sizeof(serv)) ==-1)
        {
            fprintf(log,"Couldn't bind port %i to lokalhost\n",s);
        }else fprintf(log,"Port %i successful bound to localhost\n",s);
    
        if(listen(s,4)==-1)
        {
            fprintf(log,"Couldn't open socket for Client connections");
        }else fprintf(log,"Port successful for Client-Connections opened");
    
        cli_size=sizeof(cli);
        for(;;)
        {
            FD_ZERO(&rfds);
            FD_SET(0,&rfds);
            tv.tv_sec=5;
            tv.tv_usec=0;
    
            retval=select(1,&rfds,NULL,NULL,&tv);
    
            if(retval)
            {
                printf("");
            }else printf("data unavailable");
    
            c=accept(s,(struct sockaddr*)&cli,&cli_size);
    
            senden(1);
    
        }
    
    }
    
    int senden(int m)
    {
        int bytes;
        char buffer[]="Willkommen Client\n";
        bytes=send(s,buffer,strlen(buffer),0);
        printf("%i",bytes);
        if(bytes==-1)
        {
            printf("\n Error");
            return -1;
        }
        return 0;
    }
    

    Muss ich connect auch im server einfügen? ich hab gedacht, das das nur der client braucht um zum server zu connecten.
    PS. der parameter m in der funktion int senden(int m) is nur da, weil der compieler sonst sich beschwert.

    [ Dieser Beitrag wurde am 25.10.2002 um 17:26 Uhr von TheDeath editiert. ]


Anmelden zum Antworten