View Javadoc
1   package org.sim0mq.test.pair;
2   
3   import java.util.Scanner;
4   
5   import org.zeromq.SocketType;
6   import org.zeromq.ZContext;
7   import org.zeromq.ZMQ;
8   
9   /**
10   * Client-server implementation in 0MQ using the PAIR implementation. This involves exactly one client and one server that can
11   * chat with each other independent of the order of the messages. Text is read from stdin. This is the client. It can be started
12   * before or after the server. Any messages already created will be buffered and will not get lost.
13   * <p>
14   * Copyright (c) 2013-2017 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
15   * BSD-style license. See <a href="http://sim0mq.org/docs/current/license.html">Sim0MQ License</a>.
16   * </p>
17   * $LastChangedDate: 2015-07-24 02:58:59 +0200 (Fri, 24 Jul 2015) $, @version $Revision: 1147 $, by $Author: averbraeck $,
18   * initial version 25 Apr 2020 <br>
19   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
20   */
21  public final class PairClient
22  {
23      /**
24       * @param port port nr
25       * @param clientname name
26       */
27      private PairClient(final int port, final String clientname)
28      {
29          ZContext ctx = new ZContext();
30          ZMQ.Socket socket = ctx.createSocket(SocketType.PAIR);
31          socket.connect("tcp://localhost:" + port);
32          new ListenThread(socket).start();
33          Scanner scanner = new Scanner(System.in);
34          while (true)
35          {
36              String line = scanner.nextLine();
37              if (line.isEmpty())
38              {
39                  break;
40              }
41              socket.send(String.format("%s: %s", clientname, line));
42          }
43          ctx.close();
44          ctx.destroy();
45          scanner.close();
46          System.exit(0);
47      }
48  
49      /**
50       * @param args pairserver_port name
51       */
52      public static void main(final String[] args)
53      {
54          String port = args.length < 1 ? "9001" : args[0];
55          String name = args.length < 2 ? "client" : args[1];
56          new PairClient(Integer.valueOf(port), name);
57      }
58  
59      /** */
60      static class ListenThread extends Thread
61      {
62          /** */
63          private ZMQ.Socket socket;
64  
65          /**
66           * @param socket socket
67           */
68          ListenThread(final ZMQ.Socket socket)
69          {
70              super();
71              this.socket = socket;
72          }
73  
74          /** {@inheritDoc} */
75          @Override
76          public void run()
77          {
78              while (true)
79              {
80                  String msg = this.socket.recvStr();
81                  if (!msg.isEmpty())
82                  {
83                      System.out.println(msg);
84                  }
85              }
86          }
87  
88      }
89  }