Hi Sven (and Goran), Thanks a lot! This is pretty much what I was looking for. I will poke around some more. Cheers, Doru On 24 Feb 2012, at 16:14, Sven Van Caekenberghe wrote:
On 24 Feb 2012, at 15:42, Göran Krampe wrote:
On 02/24/2012 02:28 PM, Tudor Girba wrote:
Hi Sven,
Thanks, but I did not explain my problem correctly. My problem is actually super trivial. I have a server that throws continuously plain text (actually, it's a logging facility), and I need to implement a client that connects to it and consumes the plain text endlessly without any feedback to the server. So, essentially, there is no communication protocol involved.
Just use SocketStream. Since you are building a client it is trivial:
stream := SocketStream openConnectionToHostNamed: host port: port. [stream isConnected] whileTrue: [ line := stream nextLineLf]
...or something like that (just see protocol of SocketStream). No need to use Socket directly - I tend to keep repeating that on mailinglists. :)
For a trivial *forking server* you can load Blackfoot from SS and "copy" from it, it is a stripped down server basically.
regards, Göran
He wants a server, I think.
Here is an example of a very simple forking server, without error handling code:
| serverSocket serverProcess | serverSocket := Socket newTCP. serverSocket listenOn: 8888 backlogSize: 5. serverProcess := [ [ | clientSocket stream line | clientSocket := serverSocket waitForAcceptFor: 900. stream := SocketStream on: clientSocket. [ [ (line := stream nextLine) ~= 'quit' ] whileTrue: [ Transcript crLog: line. stream nextPutAll: line reverse; crlf; flush ]. stream close ] fork. ] repeat ] fork. { serverProcess. serverSocket }.
And here is how it works:
$ telnet 127.0.0.1 8888 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. hello olleh doru urod smalltalk klatllams quit Connection closed by foreign host.
Make sure to inspect the code above, so that you can #terminate the server process and #close the server socket. The process browser is useful too (don't forget to update it), as will be
Socket allInstances
and/or
Socket allInstances do: #close
(Warning: you will crash/hang your image until you get this 100% right with proper error handling.)
HTH,
Sven
-- Sven Van Caekenberghe http://stfx.eu Smalltalk is the Red Pill
-- www.tudorgirba.com "Problem solving efficiency grows with the abstractness level of problem understanding."