Serwer-Klienci-> Log konwersacji do pliku txt

0

Witam
jestem programowym laikiem, ale potrzebuję stworzyć aplikację serwer-klienci, treść konwersacji pomiędzy tymi stronami ma być zapisywany do pliku tekstowego. Problem w tym że nie bardzo wiem, czy da się to zrobić w klasie Server, czy może trzeba kombinować w klasie ServerCommunicationThread, oraz jak to zrobić.
Będę wdzięczny za jakiekolwiek podpowiedzi, jak to rozwiązać.

Na razie te klasy wyglądają tak (ServerProtocolHandler nie ma znaczenia chyba):

Server

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {
        
        while (true)
        {
            ServerSocket serverSocket = null;
            try {
                serverSocket = new ServerSocket(4444);
            } catch (IOException e) {
                System.err.println("SERVER: Could not listen on port: 4444, " + e);
                System.exit(1);
            }
            System.out.println("SERVER: Server connection opened on port 4444.");
    
            Socket clientSocket = null;
            try {
                // after this method server stops and waits for new client connection
                clientSocket = serverSocket.accept();
                serverSocket.close();
            } catch (IOException e) {
                System.err.println("SERVER: Accept failed: 4444, " + e);
                System.exit(1);
            }
            System.out.println("SERVER: Accepted client connecion on port 4444.");
    
            ServerCommunicationThread thread = new ServerCommunicationThread(clientSocket);
            thread.start();
        }

    }

}

 

ServerCommunicationThread


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerCommunicationThread extends Thread{

    private Socket clientSocket;
    
    public ServerCommunicationThread(Socket clientSocket)
    {
        this.clientSocket = clientSocket;
    }
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            System.out.println("SERVER: IN and OUT streams opened. Starting receiving data...");

            out.println("Witam na serwerze. Czekam na dane.");
            out.flush();
            
            String inputLine, outputLine;
            ServerProtocolHandler handler = new ServerProtocolHandler();
            while ((inputLine = in.readLine()) != null) {
                outputLine = handler.processMessage(inputLine);
                out.println(outputLine);
                out.flush();
                if (inputLine.equals("koniec"))
                    break;
            }
            System.out.println("SERVER: Ending sequence received. Closing streams and sockets.");
            out.close();
            in.close();
            clientSocket.close();
            System.exit(0);
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }

    }

}

Client:


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 4444);
            System.out.println("CLIENT: Server connected on port 4444");
            
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println("CLIENT: IN and OUT streams opened. Starting sending data...");
            
            String userInput, serverResponse;
            BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
            
            while ((serverResponse = in.readLine()) != null) {
                System.out.println("Server: " + serverResponse);
                
                System.out.print("Client: ");
                userInput = console.readLine();
                out.println(userInput);
                out.flush();
                
                if (userInput.equals("koniec")) {
                    break;
                }
            } 

            System.out.println("CLIENT: Ending server connection. Closing client streams and socket.");
            out.close();
            in.close();
            socket.close();
            System.exit(0);
        } catch (UnknownHostException e) {
            System.err.println("CLIENT: Trying to connect to unknown host: " + e);
            System.exit(1);
        } catch (Exception e) {
            System.err.println("CLIENT: Exception:  " + e);
            System.exit(1);
        }

    }

}

 
0

Nie patrzyłem na kod ale sprawa z zapisem rozmowy do pliku nie wydaje się truda. Jeżeli serwer coś odbierze - zapisz to do pliku, następnie gdy wysyła zrób to samo. Jeżeli dodatkowo będzie jakieś wyświetlanie tego co się odebrało lub wysłało to sprawa jest jeszcze prostsza bo zamiast wyświetlenia tylko na ekran wpisujesz to samo do pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1