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);
}
}
}