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套接字等待问题的主要内容,如果未能解决你的问题,请参考以下文章