Я должен заставить этот код вести себя как многопоточный сокет. Несколько клиентов должны подключаться к одному и тому же порту и отправлять сообщения.
Порт сервера равен 7000. Требуются несколько клиентов, подключающих к нему порт сервера 7000. Пожалуйста, предложите
public final class DeviceListener implements InitializingBean, DisposableBean {
@Value("${device.port:7000}")
private int devicePort;
private ServerSocket server = null;
private static final Logger LOG = MyLogger.logger();
public DeviceListener() {
}
//Other bean attributes and methods
@Override
public void afterPropertiesSet() throws Exception {
LOG.info("Device Port : " + devicePort);
server = new ServerSocket(devicePort);
}
@Override
public void destroy() throws Exception {
//Bean destruction code
}
// Check the device port every few minutes in case it needs reconnect
@Scheduled(initialDelay = 5 * 1000, fixedDelay = 5 * 1000) // check every 30 seconds
private void scheduledConnectionCheck() {
if ( server != null ) {
try {
LOG.info("Listening on port: {}", devicePort );
this.listen();
} catch (Exception x) {
LOG.info("Error listening on device port: {}", x.getMessage());
}
}
}
private void listen() throws Exception {
String data = null;
Socket client = this.server.accept();
String clientAddress = client.getInetAddress().getHostAddress();
System.out.println("\r\nNew connection from " + clientAddress);
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
while ( (data = in.readLine()) != null ) {
System.out.println("\r\nMessage from " + clientAddress + ": " + data);
}
}
public InetAddress getSocketAddress() {
return this.server.getInetAddress();
}
public int getPort() {
return this.server.getLocalPort();
}
}