TCP客户端无法从服务器读取数据

时间:2012-05-18 15:26:02

标签: java android tcp network-programming

所以我在Android平板电脑上运行了一个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应用程序)

2 个答案:

答案 0 :(得分:0)

我会尝试使用公开int read(char[] cbuf, int off, int len),因此您的代码将类似于:

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

网络缓冲区的readline在典型的客户端服务器应用程序中不常使用。

答案 1 :(得分:0)

你正在读行,但你没有写它们。 writeBytes()只写那些字节。行以换行符结尾。 readLine()将阻塞,直到收到一个。