在我的设置中,我使用带有Win7的PC(笔记本电脑)来创建托管网络(WiFi)。我用C ++ / CLI(.net)编程。另一方面,我有一个Android平板电脑(ICS)。平板电脑是服务器,PC是客户端。我选择了TCP的准确性,我交换命令,我不想丢失数据包。
在平板电脑方面,我使用ServerSocket
等待与方法accept()
进行通信。然后它返回Socket
等等。
在PC端,我使用Socket
然后使用connect()
将其连接到平板电脑。完成后,我{1}}字节到平板电脑,通过它的send()
...它通过其InputBuffer
返回字节,并通过调用{{}在PC中检索它们1}}。
问题是有时发送/接收周期需要几秒钟,有时需要几十毫秒。所以这是我的问题:
如果有人能给我一些线索,我将不胜感激。我是网络编程的新手,有时候“我正在失去我的拉丁语!”(嗯......法语表达!)
代码示例:(跳过简单的代码和评论......)
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();
,我会获得连接。 但即使没有超时,连接也可能需要几秒钟才能建立。
答案 0 :(得分:0)
我正在使用的平板电脑中的WiFi被窃听。我尝试使用手机和其他平板电脑,效果很好。
我实际上不知道它是否是Android(4.0.3)版本的错误,或者是否是硬件问题,因为我无法测试具有相同Android的两个不同平板电脑。
总之...
我感谢你在说连接延迟看起来太长时给你的帮助。这就是让我走上解决方案的正确道路!