2009-08-18 5 views
1

Je fais des trucs de socket sur Symbian, ce qui fonctionne très bien jusqu'ici. Cependant, Je suis confronté à un problème étrange en essayant de lire les données qui ont été envoyées. On suppose le code se présente comme suit:ReceiveOneOrMore retourne une longueur incorrecte dans Symbian

TSockXfrLength len; 

iSocket.RecvOneOrMore(buff, 0, iStatus, len);  
User::WaitForRequest(iStatus);     
if (iStatus == KErrNone) 
{ 
    printf(_L("Bytes received 1st try %4d..."), len); 
    printf(_L("Bytes Length received 2nd try %4d..."), &len); 
} 

Sortie dans les deux cas est quelque chose avec 7450, bien que j'ai reçu exactement 145 octets. Je peux vérifier cela avec un analyseur de réseau. Quelqu'un sait ce que je fais mal ici que je ne reçois pas les octets appropriés qui ont été reçus?

EDIT:

Je connecte à la prise de la manière suivante: TInetAddr SERVERADDR;
TUint iPort = 445;

TRequestStatus iStatus; 
    TSockXfrLength len; 

    TInt res = iSocketSrv.Connect(); 

    res = iSocket.Open(iSocketSrv,KAfInet,KSockStream, KProtocolInetTcp); 

    serverAddr.SetPort(iPort); 
    serverAddr.SetAddress(INET_ADDR(192,100,81,54)); 

    iSocket.Connect(serverAddr,iStatus); 

    User::WaitForRequest(iStatus); 

espoir qui aide;)

Merci

+0

Comment connectez-vous votre socket? – laalto

+0

Comme demandé, j'ai ajouté le code pour la connexion à la prise –

Répondre

2

Try

printf(_L("Bytes received 1st try %4d..."), len()); 

Le type TSockXfrLength est en fait un typedef de TPckgBuf<TInt>. C'est le moyen Descriptor Symbian de stocker des données simples arbitraires un descripteur 8 bits. Pour récupérer la valeur de l'objet len, vous devez utiliser l'opérateur().

De plus amples informations sur les classes TPckg * sont disponibles dans la bibliothèque de développeurs symbian.

+0

Merci beaucoup, cela fonctionne maintenant! –