From: <dar...@us...> - 2008-10-06 20:04:24
|
Revision: 3462 http://oorexx.svn.sourceforge.net/oorexx/?rev=3462&view=rev Author: darthapache Date: 2008-10-06 20:01:43 +0000 (Mon, 06 Oct 2008) Log Message: ----------- moved socket samples from sandbox to trunk. Also added CPL license information. Modified Paths: -------------- main/trunk/samples/readme Added Paths: ----------- main/trunk/samples/scclient.rex main/trunk/samples/scserver.rex main/trunk/samples/sfclient.rex main/trunk/samples/sfserver.rex Modified: main/trunk/samples/readme =================================================================== --- main/trunk/samples/readme 2008-10-06 19:53:04 UTC (rev 3461) +++ main/trunk/samples/readme 2008-10-06 20:01:43 UTC (rev 3462) @@ -60,6 +60,10 @@ - usepipe.rex program that uses pipeline implementation: pip.rex - makestring.rex program that uses makestring method - properties.rex an example of the Properties class + - scserver.rex simple socket server that uses the socket class + - scclient.rex simple socket client that uses the socket class + - sfserver.rex simple socket server that uses the socket function package + - sfclient.rex simple socket client that uses the socket function package These programs are executable without any change on all supported platforms. Added: main/trunk/samples/scclient.rex =================================================================== --- main/trunk/samples/scclient.rex (rev 0) +++ main/trunk/samples/scclient.rex 2008-10-06 20:01:43 UTC (rev 3462) @@ -0,0 +1,84 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Description: Simple socket client using socket class */ +/* */ +/* Copyright (c) 2007-2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.ibm.com/developerworks/oss/CPLv1.0.htm */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* Author: David Ruggles */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* instaniate an instance of the socket class */ + sock = .socket~new() + +/* instaniate an instance of the inetaddress class + with the host information of the server we will + contact: localhost and port 726578 + we use the "gethostid" class method of the socket + class to determine the localhost address */ + host = .inetaddress~new(.socket~gethostid(), '726578') + +/* connect to the server */ + if sock~connect(host) < 0 then do + say 'Connect Failed' + exit + end + + say 'type "X" to exit' + do forever + call charout , 'Send To Server: ' + parse pull message + if message~upper() = 'X' then leave + /* send message to server */ + if sock~send(message) < 0 then do + say 'Send Failed' + leave + end + /* get message from server */ + ret = sock~recv(1024) + if ret = .nil then do + if sock~errno() < 0 then + say 'Recv Failed' + else + say 'Socket Closed' + leave + end + say 'Server Responded:' ret + end + +/* close the socket connection */ + if sock~close() < 0 then + say 'SockClose Failed' + +::requires 'socket.cls' \ No newline at end of file Property changes on: main/trunk/samples/scclient.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: main/trunk/samples/scserver.rex =================================================================== --- main/trunk/samples/scserver.rex (rev 0) +++ main/trunk/samples/scserver.rex 2008-10-06 20:01:43 UTC (rev 3462) @@ -0,0 +1,106 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Description: Simple socket server using socket class */ +/* */ +/* Copyright (c) 2007-2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.ibm.com/developerworks/oss/CPLv1.0.htm */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* Author: David Ruggles */ +/* */ +/*----------------------------------------------------------------------------*/ + +srv = .myserver~new() +srv~listen() + +::requires 'socket.cls' + +::class myserver + +::method init + expose sock + +/* instaniate an instance of the socket class */ + sock = .socket~new() + +::method monitor unguarded + expose sock + + say 'Press Ctrl-C To Shutdown' + do forever + if sysgetkey('noecho')~c2x() = '03' then leave + end + +/* close the socket */ + if sock~close() < 0 then + say 'SockClose Failed' + +::method listen + expose sock + +/* instaniate an instance of the inetaddress class + with the host information of the server we will + contact: localhost and port 726578 + we use the "gethostid" class method of the socket + class to determine the localhost address */ + host = .inetaddress~new(.socket~gethostid(), '726578') + +/* bind to the host information */ + if sock~bind(host) < 0 then do + say 'Bind Failed' + exit + end + + if sock~listen(256) < 0 then do + say 'Listen Failed' + exit + end + + self~start('monitor') -- this will allow the server to be shutdown cleanly + + do forever + csock = sock~accept() -- prepare to accept a new client + if .nil = csock then leave -- if the socket is closed (by monitor) sockaccept will return .nil + /* this will spawn a thread to handle the new client and then return to accept the next client */ + self~start('respond', csock) + end + +::method respond unguarded + use arg sock + + do forever + /* get data from the client */ + data = sock~recv(1024) + if data = .nil then leave + /* echo that data back to the client */ + sock~send('Echo:' data) + end Property changes on: main/trunk/samples/scserver.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: main/trunk/samples/sfclient.rex =================================================================== --- main/trunk/samples/sfclient.rex (rev 0) +++ main/trunk/samples/sfclient.rex 2008-10-06 20:01:43 UTC (rev 3462) @@ -0,0 +1,86 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Description: Simple socket client using socket function package */ +/* */ +/* Copyright (c) 2007-2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.ibm.com/developerworks/oss/CPLv1.0.htm */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* Author: David Ruggles */ +/* */ +/*----------------------------------------------------------------------------*/ + +/* load socket function package if it's not already loaded */ + if rxfuncquery('SockDropFuncs') then do + call rxfuncadd 'SockLoadFuncs', 'rxsock', 'SockLoadFuncs' + call SockLoadFuncs 'bypasscopyright' + end + +/* create a socket */ + socket = socksocket('AF_INET', 'SOCK_STREAM', 'IPPROTO_TCP') + +/* specify the host we will connect to */ + host.!family = 'AF_INET' -- Protocol family (only AF_INET is supported) + host.!addr = SockGetHostId() -- IP address (use the sockgethostid function to get address of the localhost) + host.!port = '726578' -- Port number + +/* connect to the server */ + if sockconnect(socket, 'host.!') < 0 then do + say 'SockConnect Failed' + exit + end + + say 'type "X" to exit' + do forever + call charout , 'Send To Server: ' + parse pull message + if message~upper() = 'X' then leave + /* send message to server */ + if socksend(socket, message) < 0 then do + say 'SockSend Failed' + leave + end + /* get message from server */ + ret = sockrecv(socket, 'data', 1024) + if ret < 1 then do + if ret < 0 then + say 'SockRecv Failed' + else + say 'Socket Closed' + leave + end + say 'Server Responded:' data + end + +/* close the socket connection */ + if sockclose(socket) < 0 then + say 'SockClose Failed' \ No newline at end of file Property changes on: main/trunk/samples/sfclient.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native Added: main/trunk/samples/sfserver.rex =================================================================== --- main/trunk/samples/sfserver.rex (rev 0) +++ main/trunk/samples/sfserver.rex 2008-10-06 20:01:43 UTC (rev 3462) @@ -0,0 +1,108 @@ +/*----------------------------------------------------------------------------*/ +/* */ +/* Description: Simple socket server using socket function package */ +/* */ +/* Copyright (c) 2007-2008 Rexx Language Association. All rights reserved. */ +/* */ +/* This program and the accompanying materials are made available under */ +/* the terms of the Common Public License v1.0 which accompanies this */ +/* distribution. A copy is also available at the following address: */ +/* http://www.ibm.com/developerworks/oss/CPLv1.0.htm */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* Redistributions of source code must retain the above copyright */ +/* notice, this list of conditions and the following disclaimer. */ +/* Redistributions in binary form must reproduce the above copyright */ +/* notice, this list of conditions and the following disclaimer in */ +/* the documentation and/or other materials provided with the distribution. */ +/* */ +/* Neither the name of Rexx Language Association nor the names */ +/* of its contributors may be used to endorse or promote products */ +/* derived from this software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */ +/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */ +/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */ +/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */ +/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */ +/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ +/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */ +/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */ +/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */ +/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* Author: David Ruggles */ +/* */ +/*----------------------------------------------------------------------------*/ + + srv = .myserver~new() + srv~listen() + +::class myserver + +::method init + expose socket + +/* load socket function package if it's not already loaded */ + if rxfuncquery('SockDropFuncs') then do + call rxfuncadd 'SockLoadFuncs', 'rxsock', 'SockLoadFuncs' + call SockLoadFuncs 'bypasscopyright' + end + +/* create a socket */ + socket = socksocket('AF_INET', 'SOCK_STREAM', '0') + +::method monitor unguarded + expose socket + + say 'Press Ctrl-C To Shutdown' + do forever + if sysgetkey('noecho')~c2x() = '03' then leave + end + +/* close the socket */ + if sockclose(socket) < 0 then + say 'SockClose Failed' + +::method listen + expose socket + +/* specify the host we will run as */ + host.!family = 'AF_INET' -- Protocol family (only AF_INET is supported) + host.!addr = SockGetHostId() -- IP address (use the sockgethostid function to get address of the localhost) + host.!port = '726578' -- Port number + +/* bind to the host information */ + if sockbind(socket, 'host.!') < 0 then do + say 'SockBind Failed' + exit + end + +/* start listening for new connections */ + if socklisten(socket, 256) < 0 then do + say 'SockListen Failed' + exit + end + + self~start('monitor') -- this will allow the server to be shutdown cleanly + + do forever + clientsocket = sockaccept(socket) -- prepare to accept a new client + if clientsocket = '-1' then leave -- if the socket is closed (by monitor) sockaccept will fail + /* this will spawn a thread to handle the new client and then return to accept the next client */ + self~start('respond', clientsocket) + end + +::method respond unguarded + use arg socket + + do forever + /* get data from the client */ + if sockrecv(socket, 'data', 1024) < 1 then leave + /* echo that data back to the client */ + call socksend socket, 'Echo:' data + end Property changes on: main/trunk/samples/sfserver.rex ___________________________________________________________________ Added: svn:executable + * Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |