Network Order



  • Hi,

    hab ein Prob beim laden über DCC (irc)

    //Folgendes aus der der RFC

    The recipient should acknowledge each packet by transmitting
    the total number of bytes received as an unsigned, 4 byte
    integer in network byte order. The sender should not continue
    to transmit until the recipient has acknowledged all data
    already transmitted. Additionally, the sender should not
    close the connection until the last byte has been
    acknowledged by the recipient.
    ////

    Mein Code:

    rc=recv(DownloadSocket,buffer,8196,0);
    
    		if(rc==0 || rc==SOCKET_ERROR)
    		{
    			AfxMessageBox("Fehler: Verbindung getrennt");
    			closesocket(DownloadSocket);
    			return 0;
    		}
    		else
    		{
    			buffer[rc]='\0';
    			// daten ausgeben und eine antwort senden
    			CString sTemp;
    			sTemp.Format("%s [%d]", buffer, rc);
    			AfxMessageBox(sTemp);
    
    			send(DownloadSocket, (char*)ntohs(rc), 4, 0);		}
    

    Die Frage ist schick ich das richtig ab, mit den "4 Bytes antwort"?



  • Nope, der Cast ist Blödsinn. Und ntohs ist schonmal die falsche Richtung.

    u_long rcInNetworkOrder = htonl(rc); // Host TO Network Long
    send(s, (const char*)(&rcInNetworkOrder), 4, 0);
    

    Ich glaube auch dass du nicht "rc" zurückschicken solltest, sondern die Summe aller bereits erhaltenen Bytes ("total number of bytes received "). Also irgendwo mitzählen.



  • Komisch der bricht die Verbindung aber trotzdem ab, meistens nach dem 2 Packet eingang.

    Umso höher der Buffer umso mehr Packete erhale ich.


Anmelden zum Antworten