Problem mit sockets und buffer senden..



  • Hallo ich habe folgendes Problem:
    Ich haben einen server der zeichen aus einer datei liest und diese in einen puffer speichert. dieser wird über ein socket auf den client übertragen und der soll dann die Zeichen der datei wieder ausgeben. Soweit sogut, es funktioniert alles, wenn ich denn puffer in der SERVERconsole ausgeben lasse sehe ich den kompletten inhalt der datei, schicke ich ihn aber zum client und versuche ihn in der CLIENTkonsole auszugeben, sehe ich nur die letze zeile des inhaltes der Datei.

    OS: Windows XP

    hier mal der Servercodeschnipsel:

    FILE *pf;
       char inhalt[900];
       char *returncode;
    
            pf=fopen("C:\\a.txt","r");
          while(1)
          {
          returncode = fgets(inhalt,900,pf);
                if(feof(pf))
             	break;
                printf("%s", inhalt);
    
          }
          fclose(pf);
         rc=send(connectedSocket,inhalt,strlen(inhalt),0);
    

    und hier der clientcodeschnipsel, zum empfangen:

    rc=recv(s,buf2,900,0);
        if(rc==0)
        {
          printf("Server hat die Verbindung getrennt..\n");
          break;
        }
        if(rc==SOCKET_ERROR)
        {
          printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
          break;
        }
        buf2[rc]='\0';
        printf("\nServer antwortet: %s ", buf2);
      }
    

    Ich hab schon viele verschiedene befehle zum ausgeben des puffers versucht wie z.B. puts... ich bekomme aber immer nur die letzte zeile, und meiner meinung müsste das programm optimal laufen und den ganzen inhalt der datei ausgeben.

    Wo ist mein denkfehler ???



  • liegt dran, dass die datei in stueckchen kommt und du in deinem puffer immer ueberschreibst.



  • ehm und wie mach ichs besser ?



  • dort im puffer weiterschreiben, wo du aufgehoert hast.

    ODER sofort nach jedem stueck den puffer ausgeben.



  • ich versteh jetz nich so genau wie du das meinst, kannste mir schnell n code posten wäre sehr sehr nett



  • int pos = 0;
    int buflen = 1000000000000000;
    char buffer[buflen];

    while (1)
    {
    pos += read(buffer+pos, buflen-pos,...);
    }


Anmelden zum Antworten