【发布时间】:2017-04-04 04:13:02
【问题描述】:
我无法在套接字连接中获得响应,并且我无法理解代码有什么问题。 我可以使用 ip 地址和端口号建立套接字连接,并且它正在进入
if (nsocket.isConnected()) {}
当我尝试使用 telnet 时,我可以得到响应。但是输入还有一些其他参数,例如:
POST /setMap HTTP/1.1 主机:192.168.1.1 内容类型:应用程序/json;字符集=utf-8 内容长度:1234
{ "cmd":"request_get_file_list","verification":"CVS" }
我不知道如何在我的代码中包含内容类型、长度等连接属性。
代码如下:
public class WebService {
public static String devicelisting() {
Socket nsocket;
String response = null;
try {
nsocket = new Socket("192.168.1.1", 6666);
if (nsocket.isConnected()) {
JSONObject json = new JSONObject();
json.put("cmd", "request_get_file_list");
json.put("verification", "CVS");
Log.i("AsyncTask", "doInBackground: Creating socket");
// nsocket = new Socket();
OutputStreamWriter out = new OutputStreamWriter(nsocket.getOutputStream(), StandardCharsets.UTF_8);
out.write(json.toString());
Log.i("Webservice", "json.toString"+json.toString());
InputStream in = new BufferedInputStream(nsocket.getInputStream());
BufferedReader r = new BufferedReader(new InputStreamReader(in));
StringBuilder stringbuilder = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
stringbuilder.append(line);
Log.i("line", "line.line"+line);
}
response = stringbuilder.toString();
Log.i("Response", response);
}
else{
Log.i("Response", "not connected");
}
} catch (ProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return response;
}
请帮我找出问题所在。我被卡住了。请帮我解决问题
【问题讨论】:
-
也许您可以尝试“数据包捕获”应用程序,看看是否有任何类型的响应您在应用程序中看不到或接收到,但实际上您是通过设备收到的
-
输入是POST?如果您正在实施 HTTP,则需要在开始之前对 RFC 2616 有很好的了解。太宽泛。 NB
Socket.isConnected()在您测试它时不可能是假的。不要编写无意义的代码。 -
@EJB 对不起,我是套接字连接的新手。那我应该怎么做才能解决这个问题呢?
-
您能否尝试将此示例与@Haris Qureshi 提供的答案进行比较?您也可以像这样设置超时: mSocket.setSoTimeout(10000);客户端和服务器应用的参考链接,examples.javacodegeeks.com/android/core/socket-core/…