gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:54:35 25 4
gpt4 key购买 nike

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

在平板电脑端,我使用一个 ServerSocket 等待与方法 accept() 的通信。然后它返回一个Socket

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

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

  1. 我们可以预期此类通信的正常行为吗?
  2. 我们能否通过设置缓冲区大小或其他设置来微调此行为?
  3. 最长的步骤是什么:连接或传输数据?

如果有人能给我一些线索,我将不胜感激。我是网络编程的新手,有时“我正在失去我的拉丁语!”(好吧......法语表达!)


代码示例:(跳过琐碎的代码和注释...)

PC端(C++/CLI)

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 );

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

// ... 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();

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

问题(似乎)发生在 PC 端的 connect() 中。我经常遇到错误 TimeoutConnectionRefused。如果我在循环中重做 connect(),我将获得一个连接。 但即使没有超时,连接也可能需要几秒钟才能建立。

最佳答案

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

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

无论如何...

感谢您在说连接延迟看起来太长时给我的帮助。这就是让我找到解决方案的正确途径的原因!

关于android - Android 平板电脑和笔记本电脑之间通过 WiFi 进行 TCP 通信的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22543318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com