title: Java server-client game
body: <p>Ok, I am quite new to network programming and I am trying to solve this problem:</p>
  
  <p>I have GUI based Java SE game for max 7 players and I want it to support multiplayer over the Internet.</p>
  
  <p>Every instance of game would have its own client sending and receiving string.</p>
  
  <p>And here comes the problem I cannot sufficiently solve. I need server and its only functionality is keeping client's sockets opened and on receiving some string just forward it to other clients. My first idea was to run server on the first player's machine and other players can connect to that server via its IP from outside. Now I discovered that getting public interface IP is not that easy as I thought so I searched and found the code written below to get some IP's that SHOULD be available from outside. When I try this at localhost, resulted IP is always some IPv6 + port and connecting from client using this credentials is successful and it works. When I start the server on another machine and copy these credentials for connecting from another computer it fails (it either doesn't connect or if it does and client sends message, server doesn't receive any).</p>
  
  <p>So my next idea was to use some public IP on remote hosting server. So there would be some server running 24/7 (or if I programmatically from game tell him so) and I use its IP to unite all clients. I just don't know how to make this thing working and what technologies use.</p>
  
  <p>I hope I explained my problem clearly and thanks for any ideas or even solutions :)</p>
  
  <p>Get machine's public interface IP (where server is running) and prints that out code:</p>
  
  <pre><code>    Enumeration&lt;NetworkInterface&gt; interfaces = NetworkInterface.getNetworkInterfaces();
          while (interfaces.hasMoreElements()) {
              NetworkInterface iface = interfaces.nextElement();
              if (iface.isLoopback() || !iface.isUp()) { //127.xxx loopback
                  continue;
              }
              Enumeration&lt;InetAddress&gt; addresses = iface.getInetAddresses();
              while (addresses.hasMoreElements()) {
                  InetAddress addr = addresses.nextElement();
                  String tmp = addr.getHostAddress();
                  if (tmp.startsWith("192.168.")       //local IP
                          || tmp.startsWith("10.")     //local IP
                          || tmp.startsWith("172.16.") //local IP
                          || tmp.startsWith("172.31.") //local IP
                          || tmp.startsWith("169.254") //single network IP
                          || tmp.equals("255.255.255.255")) { //broadcast address
                      continue;
                  }
                  //cut "%net9","%wlan" etc stuff off
                  IP = tmp.substring(0, Math.max(0, tmp.indexOf('%')));
                  port=server.getPort();
                  System.out.println(IP + " " + port);
              }
          }
  </code></pre>