The Channel class / Usage |
The base.Channel class provides methods to implement basic TCP client and server programs. Consider character set encodings when designing such programs: No implicit character set conversion is done by the runtime system. Both client and server must use the same character set and length semantics.
The following code example implements a client program connecting to a TCP port, using the openClientSocket() method:
MAIN DEFINE ch base.Channel, time DATETIME HOUR TO SECOND, data STRING LET ch = base.Channel.create() CALL ch.openClientSocket("localhost",99999,"u",3) CALL ch.writeLine("get_time") LET time = ch.readLine() DISPLAY "client 1: ", time CALL ch.writeLine("get_string") LET data = ch.readLine() DISPLAY "client 2: ", data CALL ch.writeLine("disconnect") CALL ch.close() END MAIN
The next code example implements the server program that can be used with the above client program. The server program uses the openServerSocket() and readLine() methods to listen to a given TCP interface/port. Note that the connection with a client must be ended by sending an EOF character (ASCII 26) to the client, the next readLine() call will wait for a new client connection, or select a pending client connection:
MAIN DEFINE ch base.Channel, cmd, data STRING LET ch = base.Channel.create() DISPLAY "starting server..." CALL ch.openServerSocket(null, 99999, "u") WHILE TRUE LET cmd = ch.readLine() IF ch.isEof() THEN DISPLAY "Connection ended by client..." EXIT WHILE END IF DISPLAY "cmd: ", cmd IF cmd == "get_time" THEN CALL ch.writeLine(CURRENT HOUR TO SECOND) END IF IF cmd == "get_string" THEN LET data = "This is a string..." CALL ch.writeLine(data) END IF IF cmd == "disconnect" THEN CALL ch.writeLine(ASCII 26) -- EOF END IF END WHILE DISPLAY "end of server..." END MAIN