java - Android 与 PC 通过 Socket 进行数据交换

标签 java android sockets

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

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 永远不会准备好,我无法收到服务器响应,但“服务器”报告数据已发送。
你能指出我的错误吗(我想这很明显,但我看不到)?
附言也许这是错误的方式,但在这里使用任何中间层都不是一种选择。我也不能修改服务器代码。

最佳答案

有点像 :)

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

在我的例子中,它发送的是空的 UTF 字符串,根本无法接收(应该至少是一个空格字符,以便 InputStream 捕获一些东西)

关于java - Android 与 PC 通过 Socket 进行数据交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4667982/

相关文章:

java - 在本地机器上运行 ignite

java - 未知尺寸面板的布局

javascript - V8 中的压缩指针实现与 JVM 的压缩 Oops 有何不同?

c# - Java 服务器,C# 客户端。发送数据

c - 带有指针成员的recv数据包

java - Aptana Studio 与 Eclipse

android - 在 Bluez 中创建 dbus 接口(interface)

android - 清除操作按钮上的通知点击

android - 如何从其他进程访问全局静态变量

html - 使用套接字创建一个简单的网络服务器