Witam.
Od wczoraj męczę się z tym problemem, i mimo przejrzenia wielu tematów na różnych forach nie znalazłem odpowiedzi.
Program ma proste zadanie. Obiekt klasy Client powinien wysłać jedną wiadomość do serwera, a ten ją wyświetlić.
Mój problem polega na tym, że wiadomość (String) zostaje wysłana dopiero w chwili zamknięcia socketu clienta.
Obie zaprezentowane klasy są wewnętrzne, więc mogą znaleźć się w nich drobne odniesienia do zewnętrznych elementów GUI.
Tworzenie obiektu wygląda mniej więcej tak:
Client c = new Client();
c.sendM();
c.closeAll(); <--jesli to zakomentuję, wiadomość się nie wysyła
Klasa server:
private class Server
{
public Server() throws IOException
{
try
{
serverSocket = new ServerSocket(2001);
}
catch (IOException e)
{
System.out.println("Blad tworzenia serwera" + e);
}
try
{
clientSocket = serverSocket.accept();
}
catch (IOException e)
{
System.out.println("Blad accept()" + e);
}
System.out.println("Polaczono");
out = new PrintWriter(clientSocket.getOutputStream());
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String line;
while ((line = in.readLine()) != null)
{
text.append(line);
}
}
public void closeAll() throws IOException
{
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
private ServerSocket serverSocket;
private Socket clientSocket;
PrintWriter out;
BufferedReader in;
}
Klasa client:
private class Client
{
public Client() throws UnknownHostException, IOException
{
try
{
socket = new Socket("localhost",2001);
}
catch (IOException e)
{
System.out.println("Blad socketu" + e);
return;
}
out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
public void sendM()
{
String m = "Hello";
out.println(m);
out.flush();
}
public void closeAll() throws IOException
{
out.close();
in.close();
socket.close();
}
private Socket socket;
private PrintWriter out;
private BufferedReader in;
}
Co już próbowałem:
- c.socket.setTcpNoDelay(true);
- zamiast PrintWriter to BufferedWriter
- Dodawanie w różnej kolejności do wiadomości "\n \r \r\n \n\n" itp
Będę bardzo wdzięczny za pomoc.