Я занимаюсь разработкой приложения клиент-сервер Java GUI (Swing), я успешно создал класс Threaded Server, который получает сообщения от клиентов, и класс Client, который отправляет сообщение на сервер, и клиент, и сервер являются приложениями GUI, т.е.Я разрабатываю систему заказа локальной сети для моего интернет-кафе. Я новичок в программировании сокетов. Теперь мне нужен способ отправки сообщения с сервера на клиент, когда пользователь серверного графического приложения просматривает заказ в графическом интерфейсе, щелкая JLabel.значок меняется, когда приходит сообщениеИ как показать JOptionpane пользователю Client, содержащему это сообщение (клиент имеет несколько классов JPanel)
Класс клиента, который отправляет сообщение:
package questorderingsystem.engine;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class SendItemAndIp {
private static Socket socket;
public static String message = "";
public static void sendToServer(String item) throws UnknownHostException, IOException{
InetAddress IP= InetAddress.getLocalHost();
String ipadr = IP.toString();
String PCNUM = ipadr.substring(ipadr.length() - 2);
//IP SERVERAA
String host = "192.168.55.151";
int port = 1978;
InetAddress address = InetAddress.getByName(host);
socket = new Socket(address, port);
//Send the message to the server
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
String oneLine = item.replace("\n", "%");
String sendMessage = oneLine +"/"+ PCNUM;
bw.write(sendMessage);
bw.flush();
socket.close();
}
}
Потоковый сервер
package questorderingsystemserver;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ThreadedEchoServer {
static final int PORT = 1978;
public static void startServer() {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(PORT);
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
try {
socket = serverSocket.accept();
} catch (IOException e) {
System.out.println("I/O error: " + e);
}
// new thread for a client
new EchoThread(socket).start();
}
}
}
EchoServer
package questorderingsystemserver;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JLabel;
public class EchoThread extends Thread {
protected Socket socket;
}
public EchoThread(Socket clientSocket) {
this.socket = clientSocket;
}
public void run() {
InputStream inp = null;
BufferedReader brinp = null;
DataOutputStream out = null;
try {
inp = socket.getInputStream();
brinp = new BufferedReader(new InputStreamReader(inp));
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
return;
}
String line;
while (true) {
try {
line = brinp.readLine();
if ((line == null) || line.equalsIgnoreCase("QUIT")) {
socket.close();
return;
} else {
//do something
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
return;
} catch (UnsupportedAudioFileException ex) {
Logger.getLogger(EchoThread.class.getName()).log(Level.SEVERE, null, ex);
} catch (LineUnavailableException ex) {
Logger.getLogger(EchoThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}