ReceiveOneOrMore在Symbian中返回错误的长度

时间:2009-08-18 15:36:25

标签: c++ symbian

我在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);
}

两种情况下的输出均为7450,但我收到的确是145字节。 我可以用网络分析仪检查一下。任何人都知道我在这做错了什么 我没有收到已经收到的正确字节?

编辑:

我通过以下方式连接到套接字:         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);  

希望有所帮助;)

由于

1 个答案:

答案 0 :(得分:2)

尝试

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

TSockXfrLength类型实际上是TPckgBuf<TInt>.的typedef。这是在8位描述符中存储任意简单数据的Symbian描述符方式。要从len对象检索值,您需要使用()运算符。

有关TPckg *类的更多信息,请参见symbian开发人员库。