[squeak-dev] Socket remoteTestClientTCP & remoteTestServerTCP class methods

John Chludzinski john.chludzinski at gmail.com
Wed Jan 20 17:45:24 UTC 2010


For whatever reason the Socket class did not include these (class methods)
as examples, so I offer these:

---------------------------------------------Client-------------------------------------------------

remoteTestClientTCP

"FIRST start up another image, and execute: Socket remoteTestServerTCP.
THEN come back to this image and execute:"

"Socket remoteTestClientTCP"

"Performa 6400/200, Linux-PPC 2.1.24, both images on same CPU:
remoteClient TCP test done; time = 5680
250 packets, 1000000 bytes sent (176 kBytes/sec)
60 packets, 1000000 bytes received (176 kBytes/sec)"

    | socket bytesToSend sendBuf receiveBuf done bytesSent bytesReceived
packetsSent packetsReceived t |

   Smalltalk garbageCollect.

   Transcript show: 'starting client/server TCP test'; cr.
   Transcript show: 'initializing network ... '.
   Transcript show: 'ok'; cr.

   socket := Socket newTCP.
   socket connectTo: (NetNameResolver addressForName: 'localhost') port:
54321.
   [
      socket waitForConnectionFor: self standardDeadline.
      Transcript show: 'client endpoint created'; cr.
      bytesToSend := 1000000.
      sendBuf := String new: 4000 withAll: $x.
      receiveBuf := String new: 50000.
      done := false.
      bytesSent := bytesReceived := packetsSent := packetsReceived := 0.

      t := Time millisecondsToRun:[[done] whileFalse:
          [(socket sendDone and: [bytesSent < bytesToSend]) ifTrue:
             [ packetsSent := packetsSent + 1.
               bytesSent := bytesSent + (socket sendData: sendBuf)].
               socket dataAvailable ifTrue:
                  [ packetsReceived := packetsReceived + 1.
                    bytesReceived := bytesReceived + (socket
receiveDataInto: receiveBuf) ].
               done := bytesSent >= bytesToSend ].
           [bytesReceived < bytesToSend] whileTrue:
               [ socket dataAvailable ifTrue:
                   [ packetsReceived := packetsReceived + 1.
                     bytesReceived := bytesReceived + (socket
receiveDataInto: receiveBuf)]]].
       socket closeAndDestroy.
      Transcript show: 'remoteClient TCP test done; time = ' , t
printString; cr.
      Transcript
          show: packetsSent printString , ' packets, ' , bytesSent
printString ,
                   ' bytes sent (' , (bytesSent * 1000 // t) printString ,
                   ' bytes/sec)'; cr.
      Transcript
          show: packetsReceived printString , ' packets, ' ,
          bytesReceived printString , ' bytes received (' ,
         (bytesReceived * 1000 // t) printString , ' bytes/sec)'; cr.

  ] forkAt: Processor userBackgroundPriority.

---------------------------------------------Server-------------------------------------------------

remoteTestServerTCP

"See remoteTestClientTCP for instructions on running this method."
"Socket remoteTestServerTCP"

    | socket client buffer n |

   Transcript show: 'initializing network ... '.
   self initializeNetwork.
   Transcript show: 'ok'; cr.
   socket := Socket newTCP.
   socket
       listenOn: 54321
       backlogSize: 5
       interface: (NetNameResolver addressForName: 'localhost').

    Transcript show: 'server endpoint created -- run client test in other
image'; cr.

    buffer := String new: 4000.

    [
       client := socket waitForAcceptFor: self standardDeadline.

       [ client isConnected] whileTrue:
          [ client dataAvailable ifTrue:
             [ n := client receiveDataInto: buffer.
               client sendData: buffer count: n ]].
          client closeAndDestroy.
          socket closeAndDestroy.
          Transcript cr; show: 'server endpoint destroyed'; cr.

   ] forkAt: Processor userBackgroundPriority.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20100120/bf7ffa8c/attachment.htm


More information about the Squeak-dev mailing list