Android通过Socket进行PC数据交换

时间:2011-01-12 10:59:14

标签: java android sockets

我有一个像“服务器”和Android应用程序一样的Java桌面应用程序,应该充当“客户端”。
“Client”应该发送String并从“server”接收响应String []。我遇到的唯一方法是使用像这样的套接字

Socket socket = null;
    try {
        Log.d(log_tag, "creating socket");
        socket = new Socket("192.168.1.123", 8090);
        Log.d(log_tag, "creating out");
        DataOutputStream out = new DataOutputStream(socket.getOutputStream());
        DataInputStream in = new DataInputStream(socket.getInputStream());
        Log.d(log_tag, "out created. sending data");
        out.writeUTF("sql");
        Log.d(log_tag, "data sent");
        Log.d(log_tag, "receiving data. loop");
        while(in.available() == 0);
        Log.d(log_tag, "received = " + in.readUTF());
        out.close();
        in.close();
        socket.close();
        Log.d(log_tag, "all closed");
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Log.d(log_tag, "finished");

“服务器”以相同的方式构建,除了操作顺序(首先读取,然后写入响应)。

问题:Android应用程序在线冻结

while(in.available() == 0);

所以,InputStream从未准备好,我无法接收服务器响应,但“服务器”报告,数据已发送。
你能指出我的错误吗(我想这很明显,但是我看不到它)? 附:也许这是错误的方式,但这不是在这里使用任何中间层的选择。我也无法修改服务器代码。

1 个答案:

答案 0 :(得分:1)

种类的necropost:)

问题出在“服务器”代码中。

在我的情况下,它发送的是空UTF字符串,根本无法接收(至少应该有一个空格字符,以便InputStream捕获内容)