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 客户端对其进行了测试,它工作得很好,但是当我在平板电脑上运行它时,平板电脑什么也得不到

编辑:

操作系统:Windows 7 64 位专业版

编辑2:

我已经在我的电脑上运行了wireshark,我可以确认数据包被发送到正确的地址IP,所以问题确实出在接收端(android应用程序)

4

2 回答 2

0

您正在阅读台词,但不是在编写它们。writeBytes() 只写入这些字节。行以换行符结束。readLine() 将阻塞,直到它收到一个。

于 2012-05-19T11:43:16.637 回答
-1

我会尝试使用 publicint 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 回答