Winsock Frage ( recv )



  • Hallo, ich denke mal das meine Recv_Data Funktion nicht ganz so sinnvoll ist.
    Oder vielleicht doch ?

    Was könnte man da verbessern?

    Meine Klasse

    int SERVER :: Recv_Data ( char data[] , int data_size )
    {
    	recv_since = recv( client, data , data_size ,0);
            data[ recv_since  ]='\0';
    
    return recv_since;
    }
    
    main()
    {
    char bytes[20];
    
      do
      {
         recv_len = serverK.Recv_Data ( bytes , 200 );
      }
      while ( recv_len > 0 );
    
    }
    


  • Oops da gehört noch was dazu.
    main

    main()
    {
    char bytes[20];
    
      do
      {
         recv_len = serverK.Recv_Data ( bytes , 200 );
      }
      while ( recv_len > 0 );
    
            if ( recv_len > 0 )
            {
              cout<<"Ausgabe: " << bytes << endl;
             }
    
    }
    


  • Du kannst z.B. std::vector<> nutzen. Dein Code verursacht einen Bufferoverflow und kann deshalb von Angreifern missbraucht werden, da du 200 Bytes empfangen willst, aber dein Puffer nur 20 Bytes groß ist. Mit vector musst du dich nicht/kaum um den Speicher kümmern. Fixe Zahlen in den Code zu schreiben ist eh schlecht.



  • Stimmt da hatte ich jetzt gar nicht dran gedacht an das Buffer Overflow Problem ...

    Aber wie mache ich das dann mit dem Vector hier ?

    Weil ich kann der WIN API Funktion recv ja keinen Vector übergeben ...



  • Vielleicht solltest du dich erst mal mit den Grundlagen beschäftigen. Netzwerkprogrammierung ist zu anspruchsvoll und zu wichtig, es Programmieranfängern beizubringen, weil so viel schiefgehen kann.
    std::vector<> garantiert, dass hinter &vec[0] das Array liegt, welches du übergeben kannst.



  • Außerdem ist deine Deklaration von main falsch. Folgende beide sind erlaubt...

    int main(int argc, char** argv)
    
    int main()
    


  • Ich weiss das

    main
    

    nicht funktioniert.^^

    Aber ich werd mir das mit dem Vector mal anschauen.

    ps. Mag sein das es schwer ist mit der Netzwerkprogrammierung aber ich kann ja mal etwas reinschauen und rumprobieren.

    Meine Dateiübertragung funktioniert immerhin schon. ^^

    Das ganze ist einfach nur so ein Übungsprojekt für mich.


Log in to reply