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."