我有一个关于Java套接字的技术问题。
例如假设我有一个Java套接字服务器和n个多个客户端。 是否有可能几乎实时地将数据从服务器发送到任何或所有客户端?
更确切地说:
有人可以告诉我哪种方法最好吗? 此外,如果有人有代码示例,我也会很高兴。
谢谢!
答案 0 :(得分:3)
您可以在客户端中建立一个侦听套接字并等待的线程。当它从服务器获取数据时它将继续。
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
public class ResponseThread extends Thread {
private final Socket socket;
/**
* Client is a selfmade interface which has no direct connection to socket communication.
* i build it to provide start(), stop() and isRunning() methods.
*/
private final Client client;
/**
* @param client encapsulated methods to check and manage the client status itself.
* @param socket the socket which is connected to the server.
*/
public ResponseThread(final Client client, final Socket socket) {
this.client = client;
this.socket = socket;
}
@Override
public void run() {
ObjectInputStream reader = null;
try(ObjectInputStream reader = new ObjectInputStream(socket.getInputStream())) {
while (client.isRunning()) {
try {
// The thread will wait here until the server sends data.
final String line = (String) reader.readObject();
if (null == line || line.isEmpty()) {
client.stop();
} else {
System.out.println(line);
}
} catch (IOException | ClassNotFoundException e) {
client.stop();
}
}
} catch (IOException ex) {
System.out.println("ERROR Abort reading. Could not establish InputStream from Socket.");
} finally {
try {
reader.close();
} catch (IOException ex) {
System.out.println("FATAL Could not close Socket.InputStream.");
}
}
}
public Socket getSocket() {
return socket;
}
}