السلام عليكم..
انا بعمل chatting program و عندى مشكله واقعه فيها واتمنى المساعده:
البرنامج mutlithread اى client هيتم التعامل معاه فى thread خاصه بيه وعندى فى واجهه ال server فيها start button و stop button , لما يتم الضغط على stop button يقفل ال server ويبعت رسالة لكل ال client ان ال server
كود ال start button
public void openServerSocket()throws IOException{
boolean running = true;
serverSocket = new ServerSocket(2025);
clientSockets = new ArrayList();
while(running){
try {
Executor service = Executors.newCachedThreadPool();
clientSocket = serverSocket.accept();
service.execute(new ChattingProtocolWorker(clientSocket));
System.out.println("Connection Established");
/*clientThread = new Thread(new ChattingProtocolWorker(clientSocket));
clientThread.setName("client_"+counter);
clientThread.start();*/
} catch (SocketException ex1) {
running = false;
}
}
}كو] ال stop button
public void closeServerSocket() {
if(serverSocket !=null && clientSocket != null){
try {
serverSocket.close();
clientSocket.close();
} catch (SocketException ex) {
System.out.println(ex);
System.out.println("Connection Tarminated");
}
catch(IOException ex){
}
}
}h
اما بالنسبه لل client انا الى بعملوا انى بعمل check عن طريق (socket.inputstream ==-1) وفى الحاله ديه بعرف ان ال socket تم غلقه من ناحية ال server
ولو افترضت انى عندى two clients عملو connect على ال server وانا دوست على stop button واحد بس من ال two client بيحصل فيه ان (socket.inputstream ) بترجع 1- والتانى ﻷ..وبتالى واحد بس من ال client بيظهر عندو رساله ان ال server تم غلقه..
كود ال client
private void handleCheckServer() throws Exception , IOException,SocketException{
boolean flag = true;
ObjectInputStream objIn = new ObjectInputStream(in);
while(flag){
if(!(in.read() >= 0)){
flag = false;
clientOperations.closeSocket();
throw new Exception("Server Dropped");
}
}
}فى ناحية ال server لما بنده على (socket.close ) ليه thread من الى بتخدم احد ال client بتدرك ان حصل close وبتالى ال client بتعها بيستقبل 1- على inputstream اما باقلى ال thread ﻷ..
شكراا