Estou tentando criar uma aplicação bem simples, realizar apenas uma conexão TCP/IP utilizando Java Socket, gravar a mensagem do cliente em um arquivo e retornar a resposta ao cliente, porém a última parte, que seria enviar a resposta ao cliente, não está funcionando, retorna o seguinte errao: java.net.SocketException: Socket is closed
at java.base/java.net.Socket.getOutputStream(Socket.java:970)
at br.com.teste.servidor.ServidorPrincipal.main(ServidorPrincipal.java:46)
Podem me ajudar? seguem os códigos. ServidorPrincipal.java
package br.com.teste.servidor;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
public class ServidorPrincipal {
public static void main(String[] args) throws IOException {
ServerSocket servidor = new ServerSocket(30062);
Socket socket;
File arquivo;
FileWriter fw;
Scanner s;
String mensagem;
BufferedWriter bw;
try {
System.out.println("Iniciando Servidor");
socket = servidor.accept();
arquivo = new File("log.txt");
fw = new FileWriter(arquivo, true);
s = new Scanner(socket.getInputStream());
mensagem = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")) + " - "
+ s.nextLine();
System.out.println("Cliente conectado: " + socket.getInetAddress().getHostAddress());
// Gravar arquivo
bw = new BufferedWriter(fw);
bw.write(mensagem);
bw.newLine();
bw.close();
s.close();
fw.close();
// Enviar resposta
PrintStream saidaCliente = new PrintStream(socket.getOutputStream());
saidaCliente.println(mensagem);
saidaCliente.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Cliente.java
package br.com.teste.cliente;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Cliente {
public static void main(String[] args)
throws ClassNotFoundException, InterruptedException, UnknownHostException, IOException {
Socket socket = new Socket("localhost", 30062);
try {
System.out.println("Conectando");
Scanner s = new Scanner(System.in);
System.out.print("Digite a mensagem a ser enviada para o servidor: ");
String msg = s.nextLine();
s.close();
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(msg);
Scanner respostaServidor = new Scanner(socket.getInputStream());
while (respostaServidor.hasNextLine()) {
String linha = respostaServidor.nextLine();
System.out.println(linha);
}
respostaServidor.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.close();
}
}