The following code examples show an interaction between a socket server (serversocket.p) and a socket client (socketclient.p). This is an event-driven example, where the event handler code is contained in a method called OnReadResponse within a class file (callbackclass.cls).

serversocket.p

define variable serverSocket as handle no-undo.

// create a socket
create server-socket serverSocket.

// When someone connects to this socket, run the procedure "onClientConnect"
serverSocket:set-connect-procedure("onClientConnect").
serverSocket:enable-connections("-S 44120").
                                                                    
// keep socket going - duration is just a single request
wait-for connect of serverSocket.

serverSocket:disable-connections().
delete object serverSocket.
quit.
 
procedure onClientConnect:
    define input parameter vSocketHandle as handle no-undo.
    define variable vGt as character no-undo init "Server Response: got a client connection and this is the response message".
    define variable vGB as memptr no-undo.
       
    // send message to client 
    set-size(vGB) = length(vGt) + 1.
    put-string(vGB, 1) = vGt.
    vSocketHandle:write(vGB, 1, get-size(vGB)).
    SET-SIZE(vGB) = 0.

end procedure.

socketclient.p

define variable clientsocket as handle no-undo.

create socket clientsocket.

define variable callbackClass as callbackclass no-undo.

callbackClass = new callbackclass().
clientsocket:set-callback("READ-RESPONSE", "OnReadResponse", callbackClass).
clientsocket:connect("-H localhost -S 44120").

if clientsocket:connected() then
   message "Client successfully connected to the server socket" skip.
else
do:
   message "Client failed to connect to the server socket - fatal error, test aborted" skip.
   quit.
end.

wait-for read-response of clientsocket.

clientsocket:disconnect().
delete object clientsocket.
quit.

callbackclass.cls

class callbackclass:

   method public void OnReadResponse():

      define variable readSocket as handle no-undo.
      define variable clientMessage as memptr no-undo.
      define variable msgStr as character no-undo.

      readSocket = self.

      if readSocket:get-bytes-available() = 0 then do:
        return.
      end.

      set-size(clientMessage) = readSocket:get-bytes-available().

      readSocket:read(clientMessage, 1, get-size(clientMessage)).

      msgStr = get-string(clientMessage, 1, get-size(clientMessage)).

      set-size(clientMessage) = 0.

      message "Message from serverSocket: "  msgStr skip.
  
    end method.

end class.