[Gambas-user] Problem with READ on a UDP socket

Gareth Bult gareth at ...1689...
Tue Nov 4 16:33:35 CET 2008


Erm, Ok .. I was expecting a buffer layer between socket library and Gambas .. but that aside, If I'm expecting a binary packet via a UDP socket, for example;

<type> - 1 byte
<number> - 4 bytes
<size> - 2 bytes
<payload> - up to 1024, dictated by <size>

Can anyone tell me in Gambas how I would go about transferring data from the packet to Gambas Variables?

READ #$udp,data,lof($udp)

Would give me the contents of the packet as a string, but I can't seem to see an effective / efficient way of breaking it down from there .. anyone ?

tia
Gareth.



----- Original Message -----
From: "Benoit Minisini" <gambas at ...1...>
To: "mailing list for gambas users" <gambas-user at lists.sourceforge.net>
Sent: Tuesday, 4 November, 2008 2:35:21 PM GMT +00:00 GMT Britain, Ireland, Portugal
Subject: Re: [Gambas-user] Problem with READ on a UDP socket

On mardi 4 novembre 2008, Gareth Bult wrote:
> Hi,
>
> I think I reported this quite a while ago but it still seems to be a
> problem ... using READ to try to acquire less than the entire available
> buffer doesn't seem to work .. and if I read the entire buffer, there's no
> obvious way to break the packet down into it's constituent parts ...
>
> Anyone any ideas?
> (and anyone any idea where the other 24 bytes are going ??)
>
> PRIVATE $udp AS UdpSocket
>
> PUBLIC SUB _new()
>
> $udp = NEW UdpSocket AS "Socket"
> $udp.Bind(2000)
>
> END
>
> PUBLIC SUB Socket_Read()
>
> DIM cmd AS Byte
> DIM siz AS Long
>
> PRINT Lof($udp)
> READ #$udp, cmd, 1
> PRINT Lof($udp)
> 'READ #$udp, siz, 8 <= generates error if uncommented
>
> END
>
> $shell> echo "R00000011Hello World 123" |nc -u localhost 2000
>
> 25
> 0 <=== "should be 24!"

After having investigated, it seems that this is a property of the UDP 
sockets.

According to the manual page, when you read a message from a socket, "If a 
message is too long to fit in the supplied buffer, excess bytes may be 
discarded depending on the type of socket the message is received from".

You should not have this behaviour if you use a TCP socket.

But note that Gambas could be more user-friendly by maintaining an internal 
message buffer for UDP sockets, so that successive READs in the same event 
handler work as you expected. I will think about that.

Regards,


-- 
Benoit Minisini

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Gambas-user mailing list
Gambas-user at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

-- 
Managing Director, Encryptec Limited
Tel: 0845 5082719, Mob: 0785 3305393
Email: gareth at ...1689... 
Statements made are at all times subject to Encryptec's Terms and Conditions of Business, which are available upon request.




More information about the User mailing list