Android平板电脑和笔记本电脑之间通过WiFi进行TCP通信的延迟

时间:2014-03-20 19:34:10

标签: android sockets networking tcp c++-cli

在我的设置中,我使用带有Win7的PC(笔记本电脑)来创建托管网络(WiFi)。我用C ++ / CLI(.net)编程。另一方面,我有一个Android平板电脑(ICS)。平板电脑是服务器,PC是客户端。我选择了TCP的准确性,我交换命令,我不想丢失数据包。

在平板电脑方面,我使用ServerSocket等待与方法accept()进行通信。然后它返回Socket等等。

在PC端,我使用Socket然后使用connect()将其连接到平板电脑。完成后,我{1}}字节到平板电脑,通过它的send() ...它通过其InputBuffer返回字节,并通过调用{{}在PC中检索它们1}}。

问题是有时发送/接收周期需要几秒钟,有时需要几十毫秒。所以这是我的问题:

  1. 这种沟通是我们可以期待的正常行为吗?
  2. 我们可以通过设置缓冲区大小或其他东西来微调这种行为吗?
  3. 最长的步骤是什么:连接或传输数据?
  4. 如果有人能给我一些线索,我将不胜感激。我是网络编程的新手,有时候“我正在失去我的拉丁语!”(嗯......法语表达!)


    代码示例:(跳过简单的代码和评论......)

    PC端(C ++ / CLI)

    OutputBuffer

    平板电脑方(Android ICS)由于线程化,代码稍微复杂一些。我将跳过强制性的try / catch ...

    receive()

    所以,这是一个简单的应用程序,我可以接受一个连接。一旦它被接受,我处理它,然后我关闭套接字就是这样。

    问题出现(似乎)在PC端Socket^ lpSocket = gcnew Socket( SocketType::Stream, ProtocolType::Tcp ); lpSocket->Connect( Addr, Port ); // PROBLEMS HERE SocketError err; array<Byte>^ lOutBuffer = Encoding::UTF8->GetBytes( "Here's a sentence.\r\n" ); lpSocket->Send( lOutBuffer, 0, lOutBuffer->Length, SocketFlags::None, err ); array<Byte>^ lInBuffer = gcnew array<Byte>( 1024 ); int N = lpSocket->Receive( lInBuffer, 0, lInBuffer->Length, SocketFlags::None, err ); String^ lpOutString = Encoding::UTF8->getString( lInBuffer, 0, N ); 。我经常会收到错误超时 ConnectionRefused 。如果我在循环中重做// ... We are in a background thread ServerSocket mSS = new ServerSocket(); mSS.bind( new InetSocketAddress( mPort ) ); mSS.setReuseAddress( true ); Socket lCS = mSS.accept(); lCS.setSoTimeout( 1 ); lCS.setTcpNoDelay( true ); BufferedInputStream lIn = new BufferedInputStream( lCS.getInputStream() ); PrintStream lPS = new PrintStream( lCS.getOutputStream() ); byte[] lBuf = new byte[1024]; String lInStr=""; while ( true ) { try { if ( lInStr.endsWith( "\r\n" ) ) { break; } int N; if ((N=lIn.read( lBuf,0,1024))!=-1) { lInStr += new String( lBuf, 0, N, "UTF-8" );} else { break; } } catch ( SocketTimeoutException e ) { /* Can occur because timeout is set to 1ms */ } } lOut.print( lInStr ); // Just echo input to output lOut.close(); lCS.close(); mSS.close(); ,我会获得连接。 但即使没有超时,连接也可能需要几秒钟才能建立。

1 个答案:

答案 0 :(得分:0)

我正在使用的平板电脑中的WiFi被窃听。我尝试使用手机和其他平板电脑,效果很好。

我实际上不知道它是否是Android(4.0.3)版本的错误,或者是否是硬件问题,因为我无法测试具有相同Android的两个不同平板电脑。

总之...

我感谢你在说连接延迟看起来太长时给你的帮助。这就是让我走上解决方案的正确道路!