Witam, mam za zadanie napisać aplikację sieciową realizującą rysowanie po panelu, w taki sposób by także host widział to co rysuję. Mam jednak problem z komunikacją. Serwer odbiera od klienta tylko raz zadany ciąg znaków i potem wisi na metodzie read() niezależnie od tego ile razy jeszcze spróbuję nawiązać połączenie. Serwer i klienta tworzę w osobnych wątkach. Fragmenty kodu:
public final class MainWindow extends JFrame {
private class ServerThread extends Thread {
public void run() {
try {
System.out.println("Starting server...");
ServerSocket server = new ServerSocket(Integer.parseInt(portTextField.getText()));
InputStream serverReader;
while (true){
System.out.println("Server started. Listening...");
Socket receiver = server.accept();
System.out.println("Connection accepted. Client's IP: " + receiver.getLocalAddress());
serverReader = receiver.getInputStream();
System.out.println("Printing input:");
int c;
while ((c = serverReader.read()) != -1) {
System.out.print((char) c);
}
System.out.println();
serverReader.close();
receiver.close();
//this.wait();
}
} catch (IOException ex) {
System.out.println("Server IOException!:");
System.out.println(ex.getLocalizedMessage());
} finally {
System.out.println("Server Thread shutting down...");
}
}
}
private class ClientThread extends Thread {
public void run() {
try {
String wyjscie = new String ("Test");
System.out.println("Strarting client...");
Socket client = new Socket(hostTextField.getText(), Integer.parseInt(portTextField.getText()));
OutputStream output = client.getOutputStream();
output.write(wyjscie.getBytes());
output.flush();
} catch (IOException ex){
System.out.println("Client IOException!:\n");
System.out.println(ex.getLocalizedMessage());
}
}
}
private Button getStartServerButton() {
if (startServerButton == null) {
startServerButton = new Button();
startServerButton.setBounds(new Rectangle(500, 57, 94, 24));
startServerButton.setLabel("Start server");
startServerButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (server == null){
server = new ServerThread();
server.start();
}
}
});
}
return startServerButton;
}
private Button getConnectButton() {
if (connectButton == null) {
connectButton = new Button();
connectButton.setBounds(new Rectangle(368, 57, 120, 26));
connectButton.setLabel("Connect");
connectButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
ClientThread client = new ClientThread();
client.start();
}
});
}
return connectButton;
}
}
http://4programmers.net/Pastebin/890 - Tu jest dostępny cały kod, gdyby ktoś uznał za konieczne odpalić go u siebie.