|
![]() |
|||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--ipworks.Ipdaemon
The IPDaemon class can be used to create TCP/IP servers. The class can handle up to 1000 simultaneous connections on the same TCP/IP port (service port). It is designed to balance the load between connections for a fast, powerful server.
IPDaemon is the server complement of IPPort (which is used to create client applications). They share a common design philosophy and interface. We expect you will find IPDaemon as easy to use as IPPort.
Each instance of IPDaemon can handle up to 1000 simultaneous incoming connections. These connections are identified by a ConnectionId (a number between 1 and 1000). Most of IPDaemon's properties are array properties indexed by ConnectionId . IPDaemon's events also have ConnectionId as a parameter to identify the connection they relate to.
Our main goal in designing IPDaemon was to make it easy to use without sacrificing performance. The class has a minimum of properties, and six events: ConnectionRequest , Connected , DataIn , Disconnected , ReadyToSend , and Error .
IPDaemon can start to listen on a port by setting the Listening property to True. When a remote host asks for a connection, the ConnectionRequest event is fired. At that point, the connection can either be accepted or rejected. If the connection is accepted, a ConnectionId is assigned, and communication can start. From this point on, the operation is very similar to IPPort. Data is sent by assigning the data string to the DataToSend property. The address and port of the incoming connection can be found by querying the RemoteHost and RemotePort properties.
Constructor Summary | |
Ipdaemon()
|
Method Summary | |
void |
addIpdaemonEventListener(IpdaemonEventListener l)
|
void |
fireConnected(int connectionId,
int statusCode,
java.lang.String description)
Fired immediately after a connection completes (or fails). |
void |
fireConnectionRequest(boolean accept)
Fired when a request for connection comes from a remote host. |
void |
fireDataIn(int connectionId,
byte[] text,
boolean EOL)
Fired when data (complete lines) comes in. |
void |
fireDisconnected(int connectionId,
int statusCode,
java.lang.String description)
Fired when a connection is closed. |
void |
fireError(int errorCode,
java.lang.String description)
Information about errors during data delivery. |
void |
fireReadyToSend(int connectionId)
Fired when the component is ready to send data. |
int |
getBytesSent(int connectionId)
The number of bytes actually sent after an assignment to DataToSend . |
byte[] |
getEOL(int connectionId)
Used to break the incoming data stream into chunks separated by EOL . |
int |
getInBufferSize()
The size in bytes of the incoming queue of the socket. |
java.lang.String |
getLocalAddress(int connectionId)
The IP address of the interface for ConnectionId in Internet dotted format. |
java.lang.String |
getLocalHost()
The name of the local host or user-assigned IP interface through which connections are accepted or initiated. |
int |
getLocalPort()
The TCP port in the local host where the component listens. |
int |
getMaxLineLength()
The maximum amount of data to accumulate when no EOL is found. |
int |
getOutBufferSize()
The size in bytes of the outgoing queue of the socket. |
java.lang.String |
getRemoteHost(int connectionId)
The IP address of the RemoteHost in Internet dotted format. |
int |
getRemotePort(int connectionId)
The IP port of the RemoteHost for a connection. |
boolean |
isAcceptData(int connectionId)
Enables or disables data reception (the DataIn event). |
boolean |
isConnected(int connId)
Used to disconnect individual connections and/or show their status. |
boolean |
isKeepAlive()
When True, KEEPALIVE packets are enabled (for long connections). |
boolean |
isLinger()
When set to True, connections are terminated gracefully. |
boolean |
isListening()
If True, the component accepts incoming connections on LocalPort. |
void |
removeIpdaemonEventListener(IpdaemonEventListener l)
|
void |
setAcceptData(int connectionId,
boolean acceptData)
Enables or disables data reception (the DataIn event). |
void |
setConnected(int connId,
boolean connected)
Used to disconnect individual connections and/or show their status. |
void |
setDataToSend(int connectionId,
byte[] dataToSend)
A string of data to be sent to the remote host. |
void |
setEOL(int connectionId,
byte[] EOL)
Used to break the incoming data stream into chunks separated by EOL . |
void |
setInBufferSize(int inBufferSize)
The size in bytes of the incoming queue of the socket. |
void |
setKeepAlive(boolean keepAlive)
When True, KEEPALIVE packets are enabled (for long connections). |
void |
setLinger(boolean linger)
When set to True, connections are terminated gracefully. |
void |
setListening(boolean listening)
If True, the component accepts incoming connections on LocalPort. |
void |
setLocalHost(java.lang.String localHost)
The name of the local host or user-assigned IP interface through which connections are accepted or initiated. |
void |
setLocalPort(int localPort)
The TCP port in the local host where the component listens. |
void |
setMaxLineLength(int maxLineLength)
The maximum amount of data to accumulate when no EOL is found. |
void |
setOutBufferSize(int outBufferSize)
The size in bytes of the outgoing queue of the socket. |
Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait |
Constructor Detail |
public Ipdaemon()
Method Detail |
public boolean isAcceptData(int connectionId) throws IPWorksException
public void setAcceptData(int connectionId, boolean acceptData) throws IPWorksException
public int getBytesSent(int connectionId) throws IPWorksException
public boolean isConnected(int connId) throws IPWorksException
Connected also shows the status of a particular connection (connected/disconnected).
How and when the connection is closed is controlled by the Linger property. Please refer to its description for more information.
public void setConnected(int connId, boolean connected) throws IPWorksException
Connected also shows the status of a particular connection (connected/disconnected).
How and when the connection is closed is controlled by the Linger property. Please refer to its description for more information.
public void setDataToSend(int connectionId, byte[] dataToSend) throws IPWorksException
If you are sending data to the remote host faster than it can process it, or faster than the network's bandwidth allows, the outgoing queue might fill up. When this happens, DataToSend The BytesSent property shows how many bytes were sent (if any). If 0 bytes were sent, then you can wait for the ReadyToSend event before attempting to send data again. (However, please note that ReadyToSend is not fired when part of the data is successfully sent).
public byte[] getEOL(int connectionId) throws IPWorksException
The EOL property is especially useful with ASCII files. Setting it to "\\n" (newline) enables splitting of the incoming ASCII text stream into lines. In this case, one event is fired for each line received (as well as in packet boundaries). The "\\n" characters are discarded.
The EOL property is a byte array string. In particular, this means that it can be more than one character long, and it can contain NULL ( '\\ 0' ) characters as well.
public void setEOL(int connectionId, byte[] EOL) throws IPWorksException
The EOL property is especially useful with ASCII files. Setting it to "\\n" (newline) enables splitting of the incoming ASCII text stream into lines. In this case, one event is fired for each line received (as well as in packet boundaries). The "\\n" characters are discarded.
The EOL property is a byte array string. In particular, this means that it can be more than one character long, and it can contain NULL ( '\\ 0' ) characters as well.
public int getInBufferSize()
Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when a new connection is accepted the InBufferSize property reverts to its defined size. The same happens if you attempt to make it too large or too small.
The InBufferSize property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public void setInBufferSize(int inBufferSize) throws IPWorksException
Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when a new connection is accepted the InBufferSize property reverts to its defined size. The same happens if you attempt to make it too large or too small.
The InBufferSize property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public boolean isKeepAlive()
Please note that Winsock implementations are not required to support SO_KEEPALIVE.
The KeepAlive property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public void setKeepAlive(boolean keepAlive) throws IPWorksException
Please note that Winsock implementations are not required to support SO_KEEPALIVE.
The KeepAlive property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public boolean isLinger()
The default behavior (which is also the default mode for Winsock stream sockets) might result in an indefinite delay in closing the connection. Although the class returns control immediately, Winsock might indefinitely hold system resources until all pending data are sent (even after your application closes). This means that valuable system resources might be wasted.
Setting Linger to False forces an immediate disconnection. If you know that the other side has received all the data you had sent (by a client acknowledgment, for example), setting Linger to False might be the appropriate course of action.
The Linger property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public void setLinger(boolean linger) throws IPWorksException
The default behavior (which is also the default mode for Winsock stream sockets) might result in an indefinite delay in closing the connection. Although the class returns control immediately, Winsock might indefinitely hold system resources until all pending data are sent (even after your application closes). This means that valuable system resources might be wasted.
Setting Linger to False forces an immediate disconnection. If you know that the other side has received all the data you had sent (by a client acknowledgment, for example), setting Linger to False might be the appropriate course of action.
The Linger property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public boolean isListening()
public void setListening(boolean listening) throws IPWorksException
public java.lang.String getLocalAddress(int connectionId) throws IPWorksException
This property is important for multihomed hosts where it can be used to find which particular network interface an individual connection is going through.
public java.lang.String getLocalHost()
In multihomed hosts (machines with more than one IP interface) setting LocalHost to the value of an interface will make the class accept connections only through that interface.
The value of LocalHost is not saved on the form.
public void setLocalHost(java.lang.String localHost) throws IPWorksException
In multihomed hosts (machines with more than one IP interface) setting LocalHost to the value of an interface will make the class accept connections only through that interface.
The value of LocalHost is not saved on the form.
public int getLocalPort()
The service port is not shared among servers (i.e. there can be only one IPDaemon 'listening' on a particular port at one time).
public void setLocalPort(int localPort) throws IPWorksException
The service port is not shared among servers (i.e. there can be only one IPDaemon 'listening' on a particular port at one time).
public int getMaxLineLength()
If an EOL string is found in the input stream before MaxLineLength characters are received, the DataIn event is fired with the EOL parameter set to True and the buffer is reset.
If no EOL is found, and MaxLineLength characters are accumulated in the buffer, the DataIn event is fired with the EOL parameter set to False and the buffer is reset.
The MaxLineLength property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
The minimum value for MaxLineLength is 256.
public void setMaxLineLength(int maxLineLength) throws IPWorksException
If an EOL string is found in the input stream before MaxLineLength characters are received, the DataIn event is fired with the EOL parameter set to True and the buffer is reset.
If no EOL is found, and MaxLineLength characters are accumulated in the buffer, the DataIn event is fired with the EOL parameter set to False and the buffer is reset.
The MaxLineLength property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
The minimum value for MaxLineLength is 256.
public int getOutBufferSize()
Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when a new connection is accepted the OutBufferSize property reverts to its defined size. The same happens if you attempt to make it too large or too small.
The OutBufferSize property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public void setOutBufferSize(int outBufferSize) throws IPWorksException
Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when a new connection is accepted the OutBufferSize property reverts to its defined size. The same happens if you attempt to make it too large or too small.
The OutBufferSize property is shared among incoming connections. When the property is set, the corresponding value is set for incoming connections as they are accepted. Existing connections are not modified.
public java.lang.String getRemoteHost(int connectionId) throws IPWorksException
ConnectionId must indicate a valid connection, or an error will be fired.
public int getRemotePort(int connectionId) throws IPWorksException
ConnectionId must indicate a valid connection, or an error will be fired.
public void fireConnected(int connectionId, int statusCode, java.lang.String description)
IpdaemonConnectedEvent
public void fireConnectionRequest(boolean accept)
IpdaemonConnectionRequestEvent
public void fireDataIn(int connectionId, byte[] text, boolean EOL)
IpdaemonDataInEvent
public void fireDisconnected(int connectionId, int statusCode, java.lang.String description)
IpdaemonDisconnectedEvent
public void fireError(int errorCode, java.lang.String description)
IpdaemonErrorEvent
public void fireReadyToSend(int connectionId)
IpdaemonReadyToSendEvent
public void addIpdaemonEventListener(IpdaemonEventListener l) throws java.util.TooManyListenersException
public void removeIpdaemonEventListener(IpdaemonEventListener l)
|
![]() |
|||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |