用Symbian优化套接字

时间:2009-08-25 16:44:21

标签: c++ sockets symbian

我在Symbian和Server机器之间打开了一个TCP连接,我想 在这两个端点之间传输大量数据(大约32K)。 Unfortuantely, 性能数据非常差,我正在寻找可以改进的想法 我的实施。我尝试过的一件事就是增加可以使用的字节数 由套接字缓冲发送&收到64K。

iSocket.SetOpt(KSoTcpSendWinSize, KSolInetTcp, 0x10000);        
iSocket.SetOpt(KSoTcpRecvWinSize, KSolInetTcp, 0x10000);

是否还有其他可以在套接字级别优化的内容以获得更好的吞吐量?

我的套接字代码也可能做一些愚蠢的事情。它遵循一个简单的请求/响应 协议。我必须使用阻塞WaitForRequest例程来确保数据已发送/接收 这样我就可以处理了。

//store requestinfo in reqbuf and send it to server; wait for iStatus
iSocket.Send( reqbuff, 0, iStatus, len );               
User::WaitForRequest(iStatus);

//store 32K file in resbuff; wait for iStatus to be sure that all data has
//been received
iSocket.Recv(resbuff, 0, iStatus, len);
User::WaitForRequest(iStatus);  
//do something with the 32K received

感谢每一条评论!

2 个答案:

答案 0 :(得分:1)

如果您使用活动对象,您可以并行发送和接收。 SDK中应该有示例代码。显然,这取决于所使用的应用程序和协议是否有帮助。

我不是TCP专家,但我认为套接字上有参数会导致您的使用模式(发送一个大缓冲区,然后接收大缓冲区)与发送大致相等数量时相比,不能最佳地使用网络两个方向的数据。 关于可以在其他操作系统中配置的TCP套接字的所有内容:se也应该可以在Symbian上配置,但首先你需要弄清楚是什么。我建议你问另一个TCP一般的问题并得到一些指示。然后你可以弄清楚如何在Symbian中设置它。

答案 1 :(得分:0)

你是否肯定

  

//用收到的32K做点什么

特别长吗?你的应用程序似乎是单线程的,所以如果这样做就行了,这就是一个明显的瓶颈。

另外,你的表现不佳是什么意思?您是否将性能与其他tcp应用程序进行了比较?

最后,如果性能是一个大问题,您可以切换到原始套接字/数据报套接字,并针对您的特定数据优化您自己的验证协议。