Question

Je travaille sur un code de réseautage pour une application iPhone qui interface avec un backend torsadé Python. J'ai rencontré un problème récemment où il semble que mon NSOutputStream double la charge utile sur Send ou Twisted double la charge utile lors de la réception.

J'utilise le style "Apple recommandé" des sockets TCP, par exemple sans interruption.

Le processus est le suivant:
CLIENT
- NSStreamEventHassPaceAvAVable: Envoyez un paquet de x octets de données
- NSStreamEventHassPaceAvAVable: Envoyez un autre paquet de Y octets de données
SERVEUR
- Twisted reçoit un paquet d'octets de taille (x + y)

Je m'assure que je ne le faites pas Envoyez des données si le statut de l'OutputStream est "NSStreamStatuswriting". S'assurer également que les données ne sont pas autorisées à être envoyées par le client si NSStreamEventHasspaceAvAvable n'a pas été lancée.

Des idées sur ce qui peut provoquer ce double / fusion de la charge utile? Le code torsadé est assez simple, en utilisant le DataReceived standard dans mon protocole:

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

Le code iOS est également assez 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.

Lorsque le code iOS ci-dessus est appelé deux fois dans une ligne (par exemple, en envoyant deux paquets les uns après les autres), le code torsadé signale la taille des données fusionnée.

Merci d'avance pour tout conseil ou suggestion.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top