Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Chisinau 2020
Mersul lucrării:
Primul pas pentru creare chatului a fost Serverul, anume el este centrul cu care comunică
fiecare client; iar pentru noi el va fi și punctul de trecere a clienților dintr-o stare în alta. UI al
serverului arată astfel:
running = true;
waitForClient();
// Stop server
private void stopServer() {
try {
// Close server socket
serverSocket.close();
running = false;
// Close window
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(ServerForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
Dacă clientul dorește să se conecteze la server, acesta este primit de către thread și adăugat
la lista de clienți:
protected static ArrayList<ServerConnection> serverConnection;
Clasa ServerConnection răspunde pentru transmiterea sau primirea datelor dintre client-
server; fiecare obiect de tip ServerConnection este un nou thread ce se finisează doar când este
șters din listă. Pentru transmitere se folosește metoda sendMessageToAllClients:
// Send message to all clients
public void sendMessageToAllClients(String message) {
for (int i = 0; i < ServerForm.serverConnection.size(); i++) {
try {
ServerConnection serverConnection = ServerForm.serverConnection.get(i);
serverConnection.dataOutputStream.writeUTF(message);
//serverConnection.dataOutputStream.flush();
} catch (IOException ex) {
Logger.getLogger(ServerConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
return true;
} else if (message.startsWith("\\disconnect:")) {
// Get user name
String disconnectName = message.substring(message.indexOf(":") + 1);
// Disconnect user
disconnect(disconnectName);
// Delete name from user list
deleteFromUserList(name);
return true;
}
return false;
}
if (serverConnection.name.equals(disconnectName)) {
serverConnection.running = false;
ServerForm.serverConnection.remove(i);
break;
}
}
}
try {
// Stop thread lopp
running = false;
// Close window
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(ClientForm.class.getName()).log(Level.SEVERE, null, ex);
}