<div>For whatever reason the Socket class did not include these (class methods) as examples, so I offer these:<br></div><div><br></div><div><div>---------------------------------------------Client-------------------------------------------------</div>
<div><br></div>remoteTestClientTCP</div><div><br>        "FIRST start up another image, and execute: Socket remoteTestServerTCP.<br>        THEN come back to this image and execute:"<br><br>        "Socket remoteTestClientTCP"<br>
<br>        "Performa 6400/200, Linux-PPC 2.1.24, both images on same CPU:<br>                remoteClient TCP test done; time = 5680<br>                250 packets, 1000000 bytes sent (176 kBytes/sec)<br>                60 packets, 1000000 bytes received (176 kBytes/sec)"<br>
<br> | socket bytesToSend sendBuf receiveBuf done bytesSent bytesReceived packetsSent packetsReceived t |<br><br> Smalltalk garbageCollect.<br><br> Transcript show: 'starting client/server TCP test'; cr.<br>
Transcript show: 'initializing network ... '.<br> Transcript show: 'ok'; cr.<br><br> socket := Socket newTCP.<br> socket connectTo: (NetNameResolver addressForName: 'localhost') port: 54321.<br>
[<br> socket waitForConnectionFor: self standardDeadline.<br> Transcript show: 'client endpoint created';         cr.<br> bytesToSend := 1000000.<br> sendBuf := String new: 4000 withAll: $x.<br>
receiveBuf := String new: 50000.<br> done := false.<br> bytesSent := bytesReceived := packetsSent := packetsReceived := 0.</div><div><br> t := Time millisecondsToRun:[[done] whileFalse: <br>
                                                 [(socket sendDone and: [bytesSent < bytesToSend]) ifTrue: <br>                                                                  [ packetsSent := packetsSent + 1.<br>                                                                  bytesSent := bytesSent + (socket sendData: sendBuf)].<br>                                                  socket dataAvailable ifTrue: <br>
                                                                 [ packetsReceived := packetsReceived + 1.<br>                                                                  bytesReceived := bytesReceived + (socket receiveDataInto: receiveBuf) ].<br>                                                  done := bytesSent >= bytesToSend ].<br>
                                 [bytesReceived < bytesToSend] whileTrue: <br>                                                  [ socket dataAvailable ifTrue: <br>                                                                  [ packetsReceived := packetsReceived + 1.<br>                                                                  bytesReceived := bytesReceived + (socket receiveDataInto: receiveBuf)]]].<br>
socket closeAndDestroy.<br> Transcript show: 'remoteClient TCP test done; time = ' , t printString; cr.<br> Transcript<br> show: packetsSent printString , ' packets, ' , bytesSent printString , <br>
' bytes sent (' , (bytesSent * 1000 // t) printString , <br> ' bytes/sec)'; cr.<br> Transcript<br> show: packetsReceived printString , ' packets, ' , </div>
<div> bytesReceived printString , ' bytes received (' , <br>                                  (bytesReceived * 1000 // t) printString , ' bytes/sec)'; cr.</div><div><br> ] forkAt: Processor userBackgroundPriority.</div>
<div><br></div><div>---------------------------------------------Server-------------------------------------------------</div><div><br>remoteTestServerTCP</div><div><br>"See remoteTestClientTCP for instructions on running this method."<br>
"Socket remoteTestServerTCP"<br><br> | socket client buffer n |</div><div><br> Transcript show: 'initializing network ... '.<br> self initializeNetwork.<br> Transcript show: 'ok'; cr.<br>
socket := Socket newTCP.</div><div> socket</div><div> listenOn: 54321<br>          backlogSize: 5<br>          interface: (NetNameResolver addressForName: 'localhost').<br>        </div><div><br></div><div> Transcript show: 'server endpoint created -- run client test in other image'; cr.</div>
<div><br> buffer := String new: 4000.<br>        <br> [<br> client := socket waitForAcceptFor: self standardDeadline.<br><br> [ client isConnected] whileTrue: <br>                  [ client dataAvailable ifTrue: <br>
                                 [ n := client receiveDataInto: buffer.<br>                                  client sendData: buffer count: n ]].<br> client closeAndDestroy.<br> socket closeAndDestroy.<br> Transcript cr; show: 'server endpoint destroyed'; cr.</div>
<div><br></div><div> ] forkAt: Processor userBackgroundPriority.<br><br></div>