3

そのため、Androidt タブレットで TCP クライアントを実行し、PC で C++ サーバーを実行しています。

タブレットから PC にデータを送信すると、PC はデータを正常に読み取ることができますが、PC がタブレットにメッセージを送り返そうとすると、タブレットは何も受信しません。readLine()何かを読み取ろうとして通話中にスタックします。

したがって、これがJavaメソッドの送信と応答の待機です

@Override
protected Void doInBackground(Void... arg0)
{   
    String msg = "";
    Socket socket = null;
    DataOutputStream outToServer = null;
    BufferedReader msgFromServer = null;
    try 
    {
        // Socket used for I/O with the server
        socket = new Socket("192.168.20.100", 48501);

        // Writing to the server
        outToServer = new DataOutputStream( socket.getOutputStream() );

        // Reading from the server
        msgFromServer = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
        DataInputStream iStrReader = new DataInputStream( socket.getInputStream() );

        // Initial comm
        outToServer.writeBytes( "MainCamConnect" );

        msg = msgFromServer.readLine(); // Get stuck here
        Log.d( "NETWORK", msg );

        socket.close();

    } 
    catch( UnknownHostException e ) 
    {
        e.printStackTrace();
    } 
    catch( IOException e ) 
    {
        e.printStackTrace();
    }

    return( null );
}

PC から送信するメッセージは次のとおりです。「StartDelayTest\n」

シンプルなc ++ TCPクライアントでテストしたので、サーバーが問題なくメッセージを送信できることはわかっていますが、タブレットで実行すると、タブレットは何も取得できません

編集:

OS : Windows 7 64 ビット プロフェッショナル版

編集2:

コンピューターでwiresharkを実行しましたが、パケットが正しいアドレスIPに送信されていることを確認できるため、問題は実際には受信側(Androidアプリ)にあります

4

2 に答える 2

0

あなたは行を読んでいますが、書いていません。writeBytes() はそれらのバイトを書き込むだけです。行は改行で終わります。readLine() は、受信するまでブロックします。

于 2012-05-19T11:43:16.637 に答える
-1

代わりにpublicを使用してみるint read(char[] cbuf, int off, int len)ので、コードは次のようになります。

char[] buffer = new char[256];
int count = read(buffer, 0, 256);

ネットワークバッファのreadlineは、一般的なクライアントサーバーアプリではあまり使用されません。

于 2012-05-18T15:30:38.947 に答える