Domanda

Sto lavorando su un codice di networking per un'applicazione iPhone che si interfaccia con un backend intrecciato Python. Di recente mi sono imbattuto in un problema in cui sembra che il mio nsoutputstream stia raddoppiando il payload su SEND o Twisted sta raddoppiando il payload su ricezione.

Sto usando lo stile "Apple consigliato" delle prese TCP, ad esempio non impollvitazione.

Il processo è il seguente:
CLIENTE
- NSStreamEventHassPaceAvailable: Invia un pacchetto di X byte di dati
- NSStreamEventHassPaceAvailable: Invia un altro pacchetto di Y byte di dati
SERVER
- Twisted riceve pacchetto di byte di dimensioni (x + y)

Mi sto assicurando di essere esplicitamente non Invia dati se lo stato di OutputStream è "NSStreamStatusWriting". Inoltre, garantire che i dati non siano autorizzati al client se NSStreamEventhassPaceAvailable non è stato lanciato.

Qualche idea su cosa potrebbe causare questo doppio up/fusione del payload? Il codice attorcigliato è abbastanza diretto, utilizzando il datarato standard nel mio protocollo:

    def dataRecieved(self, data):
        # do logic in order to decide how to handle data
        # ...
        # print of len(data) here reveals merged packet size

Anche il codice iOS è abbastanza standard:

    if (eventCode == NSStreamEventHasSpaceAvailable)
    {
        [outputStream write:[packet getData] maxLength:[packet getPacketSize]];
    }
    // [packet getData] simply returns a standard UInt8 array. 
    // [packet getPacketSize] returns the size of that array.

Quando il codice iOS sopra viene chiamato due volte in una riga (ad esempio, inviando due pacchetti uno dopo l'altro), il codice attorcigliato riporta la dimensione dei dati unita.

Grazie in anticipo per qualsiasi consiglio o suggerimento.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top