Android 使用套接字写入网络设备时出现的问题
我有一个无线设备通过连接到网络的端口22进行通信。一旦设备启动,它立即开始发送日志数据。一旦向该设备发送命令,它将停止日志记录并做出相应响应。这一切都是可行的,我已经使用telnet客户端对其进行了测试 我的问题是,我似乎无法在我的应用程序中正确发送命令。我正在按计划读取日志数据,但当我向它发送命令时,在本例中是命令“r”,它将继续输出日志数据,而不是该命令应向我显示的内容。这意味着我没有正确地发送命令。这是我的任务代码,该任务向其发送命令并将输出记录在android logcat中:Android 使用套接字写入网络设备时出现的问题,android,sockets,io,Android,Sockets,Io,我有一个无线设备通过连接到网络的端口22进行通信。一旦设备启动,它立即开始发送日志数据。一旦向该设备发送命令,它将停止日志记录并做出相应响应。这一切都是可行的,我已经使用telnet客户端对其进行了测试 我的问题是,我似乎无法在我的应用程序中正确发送命令。我正在按计划读取日志数据,但当我向它发送命令时,在本例中是命令“r”,它将继续输出日志数据,而不是该命令应向我显示的内容。这意味着我没有正确地发送命令。这是我的任务代码,该任务向其发送命令并将输出记录在android logcat中: publ
public class ReceiveVarTask extends AsyncTask<Void, Void, Void>{
String dstAddress;
int Port;
ReceiveVarTask(String addr, int port) {
dstAddress = addr;
Port = port;
}
protected Void doInBackground(Void... vars){
Socket socket = null;
String command = "r";
try {
Log.i(TAG, "Connecting to port 22");
socket = new Socket(dstAddress, Port);
Log.i(TAG, "Connected to port 22");
PrintWriter writer = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
InputStream inputStream = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
writer.println(command);
String line = reader.readLine();
Log.i(TAG, line);
while(line!=null && !isCancelled()){
line = reader.readLine();
Log.i(TAG, line);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
protected void onPostExecute(Void arg) {
taskRunning = false;
}
}
和打印命令,以:
writer.print(command+"\r");
根据我对问题描述的理解,您有一个telnet服务器,当telnet客户端连接到该服务器时,服务器开始发送客户端日志数据。客户端可以向服务器发送一个“r”来停止日志流
- 我建议您首先使用另一个telnet客户端确认发送“r”确实会阻止服务器生成更多日志数据
- 您可以使用Wireshark检查是否确实发送了“r”命令
writer.print(command+"\r");