Файл KnockKnockServer
Запускает сервер
public static void main(String[] args) {
/* Create new Server object
* Call run() on new Server object
*/
KnockKnockServer kks = new KnockKnockServer();
kks.run();
}
Запускает новые темы и открывает файл журнала.
private void run(){
try {
File logfile = new File("prog1b.log");
FileOutputStream fos = new FileOutputStream(logfile);
PrintWriter out = new PrintWriter(fos, true);
ServerSocket serverSocket = new ServerSocket(5520);
while(true){
try {
Socket serverClient = serverSocket.accept();
KnockKnockServerThread kkst = new KnockKnockServerThread(serverClient, out);
kkst.start();
} catch (IOException evt) {
System.out.println("Error");
}
}
} catch (IOException evt) {
System.out.println("error");
}
}
KnockKnockThread file
public KnockKnockServerThread(Socket clientSocket, PrintWriter logfile) {
serverClient = clientSocket;
lOut = logfile;
}
Это делает запись в файл и отвечает клиенту.
public void run() {
try {
sOut = new PrintWriter(serverClient.getOutputStream(), true);
lOut.write(formatter.format(date) + ": Client connected from " + serverClient.getRemoteSocketAddress() + " on port # " + serverClient.getPort() + ".\n");
in = new BufferedReader(new InputStreamReader(serverClient.getInputStream()));
String clientMessage = "", serverMessage = "";
while (!clientMessage.equals("quit")) {
clientMessage = in.readLine();
if(!clientMessage.equals("quit")) {
serverMessage = encrypt(clientMessage);
sOut.println(serverMessage);
lOut.write(formatter.format(date) + " Client " + serverClient.getPort() + ": " + clientMessage + "\n");
lOut.write(formatter.format(date) + " Server: " + serverMessage + "\n");
}
else if(clientMessage.equals("quit")){
sOut.println("Good Bye!\n");
lOut.write(formatter.format(date) + ": Connection closed on port " + serverClient.getPort() + ".\n");
}
}
sOut.close();
in.close();
serverClient.close();
} catch (IOException e) {
System.out.println("Error");
}
}
Общая суть программы
По какой-либо причине я могу видеть текст в файле журнала только при закрытии файла вручную. В противном случае это совершенно пусто. Я не могу найти в Интернете ничего, чтобы помочь. Я подумал, что, возможно, он возвращается к первому запуску () и создает новый файл, который будет очищать текст, но я помещал операторы печати везде, но это было не так. Я полностью сбит с толку. Я не могу закрыть файл, так как сервер должен быть готов к записи в файл журнала из других потоков.