【发布时间】:2015-05-14 15:51:36
【问题描述】:
您好,我正在开发一个用于使用套接字控制计算机的 android 应用程序,但我的问题是在我关闭输出流从而关闭套接字之前我无法从服务器获取数据,因此将无法再发送或接收数据。我的问题是如何在不关闭 OutputStream 的情况下将数据从服务器发送到客户端?
此代码用于关闭 OutputStream (ps1.close()):套接字已关闭
private class Receivecmd extends Thread{
Scanner sc = null;
@Override
public void run() {
Runtime r;
try {
sc = new Scanner(socket.getInputStream());
while(true)
{
if(sc.hasNext())
{
System.out.println("Got Some");
String sr = sc.nextLine();
if(sr.contains("shutdown "))
{
if(sr.contains("/h"))
{
sr = sr.replace("/t", "");
}
r = Runtime.getRuntime();
r.exec(sr+"/f");
}
else if (sr.contains("taskman"))
{
System.out.println("Task");
r = Runtime.getRuntime();
Process p = r.exec("tasklist.exe");
Scanner sc1 = new Scanner(p.getInputStream());
PrintStream ps1 = new PrintStream(socket.getOutputStream());
while(sc1.hasNext())
{
String s = sc1.nextLine();
ps1.println(s);
System.out.println(s);
}
ps1.close();
}
else if(sr.contains(".exe"))
{
r = Runtime.getRuntime();
r.exec(sr);
System.out.println(sr);
}
}
}
} catch (IOException ex) {
Logger.getLogger(AndroidServer.class.getName()).log(Level.SEVERE, null, ex);
}
super.run(); //To change body of generated methods, choose Tools | Templates.
}
当我删除 ps1.close() 时此代码不起作用:我仍然可以接收数据
private class Receivecmd extends Thread{
Scanner sc = null;
@Override
public void run() {
Runtime r;
try {
sc = new Scanner(socket.getInputStream());
while(true)
{
if(sc.hasNext())
{
System.out.println("Got Some");
String sr = sc.nextLine();
if(sr.contains("shutdown "))
{
if(sr.contains("/h"))
{
sr = sr.replace("/t", "");
}
r = Runtime.getRuntime();
r.exec(sr+"/f");
}
else if (sr.contains("taskman"))
{
System.out.println("Task");
r = Runtime.getRuntime();
Process p = r.exec("tasklist.exe");
Scanner sc1 = new Scanner(p.getInputStream());
PrintStream ps1 = new PrintStream(socket.getOutputStream());
while(sc1.hasNext())
{
String s = sc1.nextLine();
ps1.println(s);
System.out.println(s);
}
}
else if(sr.contains(".exe"))
{
r = Runtime.getRuntime();
r.exec(sr);
System.out.println(sr);
}
}
}
} catch (IOException ex) {
Logger.getLogger(AndroidServer.class.getName()).log(Level.SEVERE, null, ex);
}
super.run(); //To change body of generated methods, choose Tools | Templates.
}
【问题讨论】:
-
为什么不想关闭流?
-
@JordiCastilla 当我关闭流时它会关闭套接字,因此我将无法再发送或接收数据
-
这段代码发送正常,每次
ps1被刷新。接收代码是什么样的? -
看起来像:Scanner sc = new Scanner (socket.getInputStream); while (sc.hasNext ()){tasklist.add (sc.nextLine ();} (其中 tasklist 是一个字符串数组列表)
-
太棒了。
taskList是什么?没有收到数据的证据在哪里?
标签: android sockets outputstream