【问题标题】:Android socket wait issueAndroid套接字等待问题
【发布时间】:2018-05-28 16:30:08
【问题描述】:

您好,我有一个使用套接字连接到远程服务器的应用程序

socket = new Socket();
socket.connect(new InetSocketAddress(Ip, portNum), 7000);

我有两种发送和接收方法

发送中的场景是

 PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

在接收方法中

  String msg = "";
    BufferedReader in = null;

    try {
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));


        while (in.ready()) {

            msg = msg + (char) in.read();

        }
        socket.close();

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

在我调用的另一个类的 AsyncTask 中

 send();
 String response=receive();

上面的代码在没有等待期的情况下是不发送或接收的

    Thread.sleep(2000);

我知道睡眠是一种不好的方法 我应该使用什么最佳方案?

在发送方法中创建一个 AsyncTask 并在接收方法中创建另一个更好。

这是我使用睡眠的地方以及发送和接收的数据

 client.send(some sql statement representED as json format);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
// sql select result represented as json
        String RESULT = client.recive();

【问题讨论】:

  • 我们看不到你在哪里有睡眠声明。或者如果你有两个。
  • 您还应该告诉我们您发送的内容。以及您期望的响应。
  • 我编辑了问题以显示何时调用 sleep 以及发送和接收的数据。
  • 我们看不到您发送的内容,并且您没有说明您希望收到的内容,尽管我要求了。此外,您没有告诉服务器期望接收什么以及它将作为响应发送什么。
  • 发送的是 Json 格式,我期望接收的也是 json 格式,例如发送的数据 { "date":"15/12/2017", "sqlStment": "select name ,id from users" } 服务器响应 { "isSuccessful":"true" , "data":[{"name":"Ali"}, {"id":"1"}] }

标签: java android sockets android-asynctask


【解决方案1】:

在您尝试连接之前,您的服务器可能没有在监听。尽管从您发布的代码中不清楚这一点。您需要在此处显示服务器和客户端代码。

【讨论】:

  • 我没有编写服务器代码,而且服务器是用 Go 编程语言而不是 java 编写的,但来自桌面客户端 (c#) 的连接无需等待即可正常工作。
猜你喜欢
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
相关资源
最近更新 更多