TCP 数据包进入服务器,但不进入监听程序
TCP packet comes in to the server, but not to the listening program
所以我有一个 Android 应用程序和一个套接字服务器。从客户端发送第一个数据包时,通信似乎很好。我得到很好的回应。
但是,从第二次开始,当我发送数据包时,没有任何反应。服务器中没有 Logcat
也没有任何内容。我尝试打印进入服务器的所有内容。
所以我尝试用Wireshark
抓包。我在第二个数据包上看到了这种情况。
数据包似乎进来了,但我在服务器程序中没有得到任何东西运行。
我试过 运行 另一个应用程序像上面一样卡住后,第二个应用程序第一次响应正常,然后同样的事情。
所以我猜服务器程序没有卡在任何地方或其他地方。
这是我的代码的听力部分。
serverSocket = new ServerSocket(port);
while (true) { // socket
Socket clientSocket = serverSocket.accept();
out = new DataOutputStream(clientSocket.getOutputStream());
in = new DataInputStream(clientSocket.getInputStream());
byte[] read = new byte[512];
int readcount = in.read(read);
System.out.println(bytesToHex(read)); // doesn't print from the second one
if (readcount != -1) {
if (read[0] == something) {
HandleMsg doIt = new HandleMsg(connection, out, Arrays.copyOfRange(read, 1, readcount));
doIt.start();
}
else {
System.out.println("Got Something Unknown!");
System.out.println(bytesToHex(Arrays.copyOfRange(read, 0, readcount)));
}
}
}
connection
是数据库连接。
另外,当我重新启动应用程序或连接时,第一次工作正常,然后再次卡住。
感谢您的帮助。
您只从每个已接受的套接字中读取一次,因此当然不会打印来自同一来源的第二个数据包。你必须循环。
所以我有一个 Android 应用程序和一个套接字服务器。从客户端发送第一个数据包时,通信似乎很好。我得到很好的回应。
但是,从第二次开始,当我发送数据包时,没有任何反应。服务器中没有 Logcat
也没有任何内容。我尝试打印进入服务器的所有内容。
所以我尝试用Wireshark
抓包。我在第二个数据包上看到了这种情况。
数据包似乎进来了,但我在服务器程序中没有得到任何东西运行。
我试过 运行 另一个应用程序像上面一样卡住后,第二个应用程序第一次响应正常,然后同样的事情。
所以我猜服务器程序没有卡在任何地方或其他地方。
这是我的代码的听力部分。
serverSocket = new ServerSocket(port);
while (true) { // socket
Socket clientSocket = serverSocket.accept();
out = new DataOutputStream(clientSocket.getOutputStream());
in = new DataInputStream(clientSocket.getInputStream());
byte[] read = new byte[512];
int readcount = in.read(read);
System.out.println(bytesToHex(read)); // doesn't print from the second one
if (readcount != -1) {
if (read[0] == something) {
HandleMsg doIt = new HandleMsg(connection, out, Arrays.copyOfRange(read, 1, readcount));
doIt.start();
}
else {
System.out.println("Got Something Unknown!");
System.out.println(bytesToHex(Arrays.copyOfRange(read, 0, readcount)));
}
}
}
connection
是数据库连接。
另外,当我重新启动应用程序或连接时,第一次工作正常,然后再次卡住。
感谢您的帮助。
您只从每个已接受的套接字中读取一次,因此当然不会打印来自同一来源的第二个数据包。你必须循环。