私は単純なクライアントサーバーアプリケーションを作っています。どのクライアントでシャットダウンを送信するか、サーバーにコマンドを再起動します。しかし、クライアントの次のcommand.Meansソケットのためにサーバーソケットを保持する方法は、一度コマンドを受け付けています。その後、そのサーバーは他のコマンドを受け入れていません。クライアントが「再起動」を送信すると、サーバは指定された時間だけコマンドを実行し、クライアントが「中断」コマンドを送信した場合は中止する必要があります。サーバーソケットはクライアントの次のコマンドを待つ必要があります。Java
どのようにサーバーのソケットを次のコマンドを待つことができますか?ここで
は、サーバーのコードです:
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(); ''をループに入れてください。 – f1sh
あなたは私があなたに与えた、待ってくれました。私は助けようとしていました。私の担当者をコメントしません。@nilesh kumar – khakishoiab
うん!その仕事.. !! @ f1sh –