我在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);
希望有所帮助;)
由于
答案 0 :(得分:2)
尝试
printf(_L("Bytes received 1st try %4d..."), len());
TSockXfrLength
类型实际上是TPckgBuf<TInt>.
的typedef。这是在8位描述符中存储任意简单数据的Symbian描述符方式。要从len对象检索值,您需要使用()运算符。
有关TPckg *类的更多信息,请参见symbian开发人员库。