【发布时间】:2016-09-03 13:31:26
【问题描述】:
我正在制作一个简单的客户端服务器应用程序。在哪个客户端将关闭,重新启动命令发送到服务器。但是如何为客户端的下一个命令保存服务器套接字。意味着套接字一次接受命令。在该服务器不接受其他命令之后。例如。如果客户端发送“restart”,那么服务器将在给定的时间内执行命令,如果客户端发送“abort”命令,那么它应该被中止。但是服务器套接字在只接受一个命令后关闭。
如何让服务器套接字等待进一步的命令?
这是服务器代码:
running = true;
try {
System.out.println("Waiting for client........");
ServerSocket serverSocket = new ServerSocket(8002);
Socket client = serverSocket.accept();
System.out.println("Connection Accepted......");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
try {
while (running) {
String usercmnd = in.readLine();
if (usercmnd != null) {
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec(usercmnd);
//serverSocket.setSoTimeout(30000);
}
}
} catch (Exception e) {
System.out.println("Error");
e.printStackTrace();
}finally{
client.close();
System.out.println("Connection Closed......");
}
} catch (Exception e) {
System.out.println("Error");
e.printStackTrace();
}
这是客户端代码
restart.setOnClickListener(
new View.OnClickListener() {
public String rest = "shutdown -r -t 30";
@Override
public void onClick(View v) {
Socket cs = null;
try{
cs = new Socket("192.168.20.128",8002);
DataOutputStream out = new DataOutputStream(cs.getOutputStream());
out.writeBytes(rest);
Toast.makeText(PowerActivity.this, "Restart Success", Toast.LENGTH_LONG).show();
}
catch (IOException e) {
Toast.makeText(PowerActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}finally {
try {
cs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
);
【问题讨论】:
-
将您的
Socket client = serverSocket.accept();放入一个循环中以接受多个连接。 -
你要求等待,我给了你。我想帮忙。请不要唠叨我的代表@nilesh kumar
-
是的!它的工作..!!@f1sh
标签: java android sockets network-programming client-server