A Panda
A Panda

Reputation: 13

how to run java server socket program (class file) in openshift

I want to run a socket program in my openshift server.

my action_hooks/start:-

#!/bin/bash
# The logic to start up your application should be put in this
# script. The application will work only if it binds to
# $OPENSHIFT_DIY_IP:8080
#nohup $OPENSHIFT_REPO_DIR/diy/testrubyserver.rb $OPENSHIFT_DIY_IP $OPENSHIFT_REPO_DIR/diy |& /usr/bin/logshifter -tag diy &
java -cp $OPENSHIFT_REPO_DIR/diy/EchoServer

my server program:-

import java.net.*; 
import java.io.*; 

public class EchoServer
{ 
 public static void main(String[] args) throws IOException 
   { 
    ServerSocket serverSocket = null; 

    try { 
         serverSocket = new ServerSocket(); 
         serverSocket.bind(new InetSocketAddress("xxx.xxx.xx.xx",8080));
        } 
    catch (IOException e) 
        { 
         System.err.println("Could not listen on port: 8080."); 
         System.exit(1); 
        } 

    Socket clientSocket = null; 
    System.out.println ("Waiting for connection.....");

    try { 
         clientSocket = serverSocket.accept(); 
        } 
    catch (IOException e) 
        { 
         System.err.println("Accept failed."); 
         System.exit(1); 
        } 

    System.out.println ("Connection successful");
    System.out.println ("Waiting for input.....");

    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), 
                                      true); 
    BufferedReader in = new BufferedReader( 
            new InputStreamReader( clientSocket.getInputStream())); 

    String inputLine; 

    while ((inputLine = in.readLine()) != null) 
        { 
         System.out.println ("Server: " + inputLine); 
         out.println(inputLine); 

         if (inputLine.equals("Bye.")) 
             break; 
        } 

    out.close(); 
    in.close(); 
    clientSocket.close(); 
    serverSocket.close(); 
   } 
}

my client program:-

import java.io.*;
import java.net.*;

public class EchoClient {
    public static void main(String[] args) throws IOException {

        String serverHostname = new String ("xxxxxxxxxxx.rhcloud.com");

        if (args.length > 0)
           serverHostname = args[0];
        System.out.println ("Attemping to connect to host " +
        serverHostname + " on port 8080.");

        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            echoSocket = new Socket(serverHostname, 8080);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                                        echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: " + serverHostname);
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for "
                               + "the connection to: " + serverHostname);
            System.exit(1);
        }

    BufferedReader stdIn = new BufferedReader(
                                   new InputStreamReader(System.in));
    String userInput;

        System.out.print ("input: ");
    while ((userInput = stdIn.readLine()) != null) {
        out.println(userInput);
        System.out.println("echo: " + in.readLine());
            System.out.print ("input: ");
    }

    out.close();
    in.close();
    stdIn.close();
    echoSocket.close();
    }
}

my log file "diy.log"

[2015-12-22 11:59:03] INFO  WEBrick 1.3.1
[2015-12-22 11:59:03] INFO  ruby 1.8.7 (2013-06-27) [x86_64-linux]
[2015-12-22 11:59:03] INFO  WEBrick::HTTPServer#start: pid=44992 port=8080
[2015-12-22 12:05:36] INFO  going to shutdown ...
[2015-12-22 12:05:36] INFO  WEBrick::HTTPServer#start done.

I don't know the server program automatically start or not but when i run server program through ssh, the program is running but not responding to client.

Upvotes: 0

Views: 391

Answers (1)

Jiri Fiala
Jiri Fiala

Reputation: 1400

It seems you are trying to connect to port 8080 with your client:

echoSocket = new Socket(serverHostname, 8080);

The server still needs to be bound to 8080 to be externally reachable, but clients should connect to 80 or 8000 (websockets) actually. See this diagram for details on how to route requests on OpenShift.

Check the terminal output when pushing code, to see whether your action hook that is launching the server works. Make sure to have the hook file executable.

Upvotes: 1

Related Questions