Hi,
Is it possible to get the documentation of the socket api signature, because otherwise I am unable to setup a UDP server ? Annick |
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 <[hidden email]> 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 |
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 <[hidden email]> 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 <[hidden email]> 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 > > |
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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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 >> >> > > |
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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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 >>> >> > > |
Free forum by Nabble | Edit this page |