Compute Engine is a terrific hosting platform for applications – not only HTTP-based applications, but for servers running all types of services. To run these services an application has to listen for incoming connections using a server socket. Here’s how to do that in Java.
First, bind a server socket to a port. Here we’re binding it to the SMTP-reserved port 25. The port binding will fail if there’s already a server bound to that port.
//The server socket that handles all incoming connections.
ServerSocket server_socket = null;
//Bind the server socket to port 25. Fail and exit
//if we fail to bind.
try {
server_socket = new ServerSocket(25);
System.out.println("OK: Bound to port 25.");
}
catch (IOException e) {
System.err.println("ERROR: Unable to bind to port 25.");
e.printStackTrace();
System.exit(-1);
}
Now wait for an incoming connection to accept (you can put the following code into a while loop if you want to accept multiple connections):
//Now we need to wait for a client to connect to us.
//Accept() blocks until it receives a new connection.
try {
//A new client has connected.
Socket client_socket = server_socket.accept();
System.out.println("Accepted!");
//Hand off the socket for further handling.
//Do something here with the socket.
}
catch (IOException e) {
System.err.println("Failed to accept incoming connection:" + e.getMessage());
e.printStackTrace();
System.exit(-1);
}
From here, handle the socket as needed.
Remember to import the following classes:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;