Thanks sven I will check with the guys that wrote the socket chapter if we can add this snippet. Stef On 20/10/14 23:44, Sven Van Caekenberghe wrote:
Again, Pharo is a high-level language, not a low-level one.
Here is a working, standalone example:
"An UDP echo server on port 6666" [ Socket newUDP in: [ :socket | | loop buffer result input | buffer := String new: 256. loop := true. socket setPort: 6666. [ loop ] whileTrue: [ [ result := socket receiveUDPDataInto: buffer. result first > 0 ] whileFalse: [ (Delay forMilliseconds: 10) wait ]. input := buffer copyFrom: 1 to: result first. socket sendUDPData: input toHost: result second port: result third. (input beginsWith: #quit) ifTrue: [ loop := false ] ]. socket closeAndDestroy ] ] forkAt: Processor userBackgroundPriority named: 'UDP echo server'.
"Any message sent gets echoed back" Socket newUDP in: [ :socket | | buffer result | socket sendUDPData: 'testing ', 99 atRandom asString toHost: NetNameResolver localHostAddress port: 6666. buffer := String new: 256. [ result := socket receiveUDPDataInto: buffer. result first > 0 ] whileFalse: [ (Delay forMilliseconds: 10) wait ]. socket closeAndDestroy. { result. buffer. buffer copyFrom: 1 to: result first } ].
"Send quit to stop the server" Socket newUDP in: [ :socket | | buffer result | socket sendUDPData: 'quit' toHost: NetNameResolver localHostAddress port: 6666. buffer := String new: 256. [ result := socket receiveUDPDataInto: buffer. result first > 0 ] whileFalse: [ (Delay forMilliseconds: 10) wait ]. socket closeAndDestroy. { result. buffer. buffer copyFrom: 1 to: result first } ].
In a terminal (OSX or Linux), you can send a message like this:
$ nc -u 127.0.0.1 6666 foo bar foo bar quit quit
HTH,
Sven
On 20 Oct 2014, at 22:39, Annick Fron <list@afceurope.com> wrote:
In your answer you mention 1 2 3 4 data, without specifying how many bytes they have. Typically the IP address needs 4 bytes, so your answer 1 2 3 4 is quite incomplete. When I receive data like that
[28 0 203 204 â¦â¦.]
I donât know if I have only the datagram or if I have also the IP header. So my question is how do you group the bytes to get the IP address ??? Where do the data start ? What headers do I have and with which syntax ????
Annick
Le 20 oct. 2014 à 17:32, Sven Van Caekenberghe <sven@stfx.eu> a écrit :
I don't understand why you would need it, see my previous reply to your other message.
On 20 Oct 2014, at 17:23, Annick Fron <list@afceurope.com> wrote:
Hi,
Is it possible to get the documentation of the socket api signature, because otherwise I am unable to setup a UDP server ?
Annick