Witam serdecznie.
Od razu powiem, że w Javie nigdy nie pisałem a dostałem zadanie do zrobienia.
treść zadania:
Serwer rozsyłający wiadomość pozostałym klientom (1 punkt)
Zamiast wypisywać na standardowe wyjście niech wątki umieszczają wiadomość w
obiekcie, który będą współdzieliły.
class Mailbox {
private String msg;
public Mailbox() {
}
public synchronized void put(String msg) {
while (this.msg != null)
;
this.msg = msg;
}
public synchronized String take() {
while (this.msg == null)
;
String msgCopy = this.msg;
this.msg = null;
return msgCopy;
}
}
Popraw kod tak, aby wątki nie czekały aktywnie — skorzystaj w tym celu z metody
wait(), a przed zakończeniem wywołania metod put i take zbudź wątki wywołaniem
metody notifyAll(). Stwórz dodatkowy wątek, który będzie się zajmował wysyłaniem
otrzymywanych wiadomości do reszty, przy czym niech wiadomości mają następujący
format:
— M:Wiadomość do wszystkich spowoduje wysłanie komunikatu Wiadomość do
wszystkich wszystkim uczestnikom czatu,
— E:Wiadomość tylko do mnie spowoduje wysłanie komunikatu tylko do nadawcy,
— Q: spowoduje rozłączenie się z serwerem.
a oto co udało mi się do tej pory napisać
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author drosiak
*/
public class JavaApplication1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(6666);
try {
while (true) {
new ClientThread(server.accept()).start();
}
} finally {
server.close();
}
}
private static class ClientThread extends Thread {
private Socket socket;
public ClientThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
DataInput in = new DataInputStream(socket.getInputStream());
DataOutput out = new DataOutputStream(socket.getOutputStream());
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
out.write(line.getBytes());
}
} catch (IOException e) {
} finally {
try {
socket.close();
} catch (IOException e) {
}
}
}
}
class Mailbox {
private String msg;
public Mailbox() {
}
public synchronized void put(String msg) {
while (this.msg != null)
;
this.msg = msg;
}
public synchronized String take() {
while (this.msg == null)
;
String msgCopy = this.msg;
this.msg = null;
return msgCopy;
}
}
}
i teraz zwracam się z pytaniem jak dokończyć to.
Dziękuję za pomoc