Android套接字等待问题

Posted

技术标签:

【中文标题】Android套接字等待问题【英文标题】:Android socket wait issue 【发布时间】: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"] 【参考方案1】:

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

【讨论】:

我没有编写服务器代码,而且服务器是用 Go 编程语言而不是 java 编写的,但来自桌面客户端 (c#) 的连接无需等待即可正常工作。

以上是关于Android套接字等待问题的主要内容,如果未能解决你的问题,请参考以下文章

示例:使用AsyncTask的Android双向网络套接字

使用单线程等待消息队列和套接字

如何等待任何套接字有数据?

正在等待可用套接字解决方法

QT 套接字等待用户输入

从套接字读取是不是等待或获得 EOF?