Я должен сделать этот код, чтобы вести себя как многопоточный сокет. Несколько клиентов должны подключиться к одному порту и отправлять сообщения - PullRequest
0 голосов
/ 29 апреля 2020

Я должен заставить этот код вести себя как многопоточный сокет. Несколько клиентов должны подключаться к одному и тому же порту и отправлять сообщения.

Порт сервера равен 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();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...