gpt4 book ai didi

java - Android连接到java服务器套接字,但服务器套接字没有接收数据

转载 作者:行者123 更新时间:2023-11-30 12:08:21 25 4
gpt4 key购买 nike

Android 应用程序正在连接到我的专用网络中的 Java 服务器套接字。之后,应用程序向 PrintWriter 写入一个字符串,但在服务器端什么也没有收到。

我已经在同一台机器上测试了代码,它已连接(作为应用程序)并且它接收到通过 PrintWriter 发送的字符串。

安卓应用:

class SocketConnector extends AsyncTask<Void, Void, Void>{

@Override
protected Void doInBackground(Void... voids) {
try {
Socket socket = new Socket("192.168.2.116", Constant.HUB_PORT);

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));


JSONObject jsonObject = new JSONObject();
jsonObject.put("command", "some_command");
jsonObject.put("value", "some_value");

out.println(jsonObject.toString());
Log.v("json", jsonObject.toString());

Log.v("Echo: ", in.readLine());

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (NetworkErrorException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return null;
}
}

Java 服务器:

while (true) {

//Open socket
ServerSocket serverSocket = new ServerSocket(Constant.SOCKET_PORT);

//wait for client connection
Socket clientSocket = serverSocket.accept();

//create input/output streams
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

System.out.println("Connected");

String jsonString;

while ((jsonString = in.readLine()) != null) {
System.out.println(jsonString);
}


System.out.println(jsonString);

//pass command and value to handleCommand method
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject response = handleCommand(jsonObject.getString(Constant.JSON_COMMAND), jsonObject.getString(Constant.JSON_VALUE));

out.println(response.toString());

serverSocket.close();
clientSocket.close();
}

我希望 android 应用程序正确发送数据或 java 服务器套接字正确接收发送的数据。

最佳答案

无法停止思考这个问题,因为它看起来很奇怪。不过,我有一个解释,所以我会尝试一下答案:

您有两个客户端连接到达服务器。连接 1 连接但不发送任何内容(原因未知)。连接 2 连接并发送数据负载。然而,服务器甚至从未尝试读取该有效负载,因为它一直在尽职尽责地等待连接 1 发送某些内容(它从未这样做过)。第二个套接字甚至从未被 accept() 编辑。

自然地,当您使用调试器检查服务器时,您会看到它在等待 readLine()。您的错误是假设 readLine() 与连接 2 相关联。

顺便说一下,这与 .pcap 相得益彰;即使客户端连接不是 accept()-ed,它仍然会收到 ACK,并且可以自由地向服务器发送更多数据。这样的数据也将被确认。毕竟,服务器操作系统正在接收数据;您的服务器程序还没有请求它。

当您进行本地主机测试时,这可能会起作用的原因有很多;这很可能与时间有关。

关于java - Android连接到java服务器套接字,但服务器套接字没有接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54390744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com