IM Profile

javax.microedition.io
Interface ServerSocketConnection

All Superinterfaces:
Connection, StreamConnectionNotifier

public interface ServerSocketConnection
extends StreamConnectionNotifier

This interface defines the server socket stream connection.

A server socket is accessed using a generic connection string with the host omitted. For example, socket://:79 defines an inbound server socket on port 79. The host can be discovered using the getLocalAddress method.

The acceptAndOpen() method returns a SocketConnection instance. In addition to the normal StreamConnection behavior, the SocketConnection supports accessing the IP end point addresses of the live connection and access to socket options that control the buffering and timing delays associated with specific application usage of the connection.

Access to server socket connections may be restricted by the security policy of the device. Connector.open MUST check access for the initial server socket connection and acceptAndOpen MUST check before returning each new SocketConnection.

A server socket can be used to dynamically select an available port by omitting both the host and the port parameters in the connection URL string. For example, socket:// defines an inbound server socket on a port which is allocated by the system. To discover the assigned port number use the getLocalPort method.

BNF Format for Connector.open() string

The URI must conform to the BNF syntax specified below. If the URI does not conform to this syntax, an IllegalArgumentException is thrown.

<socket_connection_string> ::= "socket://" | "socket://"<hostport>
<hostport> ::= host ":" port
<host> ::= omitted for inbound connections, See SocketConnection
<port> ::= numeric port number (omitted for system assigned port)

Optional parameters are:

See SocketConnection.

Examples

The following examples show how a ServerSocketConnection would be used to access a sample loopback program.

   // Create the server listening socket for port 1234 
   ServerSocketConnection scn = (ServerSocketConnection)
                            Connector.open("socket://:1234");

   // Wait for a connection.
   SocketConnection sc = (SocketConnection) scn.acceptAndOpen();

   // Set application specific hints on the socket.
   sc.setSocketOption(DELAY, 0);
   sc.setSocketOption(LINGER, 0);
   sc.setSocketOption(KEEPALIVE, 0);
   sc.setSocketOption(RCVBUF, 128);
   sc.setSocketOption(SNDBUF, 128);

   // Get the input stream of the connection.
   DataInputStream is = sc.openDataInputStream();

   // Get the output stream of the connection.
   DataOutputStream os = sc.openDataOutputStream();

   // Read the input data.
   String result = is.readUTF();

   // Echo the data back to the sender.
   os.writeUTF(result);

   // Close everything.
   is.close();
   os.close();
   sc.close();
   scn.close();
   ..
 

When implementing a server which is supposed to handle multiple connections in parallel there still has to be a single listener but multiple threads can be started after a incoming connection has been accepted, like e.g.

 {
    // create the server                      
    ServerSocketConnection scn = (ServerSocketConnection)Connector.open("socket://:" + myPort);   
 
    while (true) 
    {                       
        // wait for incoming connection    
        SocketConnection sc = scn.acceptAndOpen();
        
        // hand new stream to worker thread which than handles the data I/O                
        myWorker = new Worker(sc);
        myWorker.start();
    }
 }
 ..
 

Since:
MIDP 2.0

Method Summary
 String getLocalAddress()
          Gets the local address to which the socket is bound.
 int getLocalPort()
          Returns the local port to which this socket is bound.
 
Methods inherited from interface javax.microedition.io.StreamConnectionNotifier
acceptAndOpen
 
Methods inherited from interface javax.microedition.io.Connection
close
 

Method Detail

getLocalAddress

public String getLocalAddress()
                       throws IOException
Gets the local address to which the socket is bound.

The host address(IP number) that can be used to connect to this end of the socket connection from an external system. Since IP addresses may be dynamically assigned, a remote application will need to be robust in the face of IP number reasssignment.

The local hostname (if available) can be accessed from System.getProperty("microedition.hostname")

Returns:
the local address to which the socket is bound.
Throws:
IOException - if the connection was closed
See Also:
SocketConnection

getLocalPort

public int getLocalPort()
                 throws IOException
Returns the local port to which this socket is bound.

Returns:
the local port number to which this socket is connected.
Throws:
IOException - if the connection was closed
See Also:
SocketConnection

IM Profile

Submit a comment or suggestion Version 2.0 of IM Profile Specification
Java is a trademark or registered trademark of Sun Microsystems, Inc. in the US and other countries. Copyright (c) 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road,Palo Alto, California, 94303, U.S.A. All Rights Reserved.