KnockKnockServer文件
这将启动服务器
public static void main(String[] args) {
/* Create new Server object
* Call run() on new Server object
*/
KnockKnockServer kks = new KnockKnockServer();
kks.run();
}
Run Code Online (Sandbox Code Playgroud)
这将启动新线程并打开日志文件。
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");
}
}
Run Code Online (Sandbox Code Playgroud)
KnockKnockThread文件
public KnockKnockServerThread(Socket clientSocket, PrintWriter logfile) {
serverClient = clientSocket;
lOut = logfile;
}
Run Code Online (Sandbox Code Playgroud)
这将写入文件并回复客户端。
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");
}
}
Run Code Online (Sandbox Code Playgroud)
该程序的总要点
无论出于何种原因,当我手动关闭文件时,我只能在日志文件中看到文本。否则,它完全是空白的。我找不到任何在线帮助。我以为可能要回到第一个run()并制作一个新文件来清除文本,但是我在各处都放置了打印语句,事实并非如此。我很困惑。我无法关闭文件,因为服务器需要准备好从其他线程写入日志文件。