Send byte array via TCP

Started by csfreebird, January 19, 2013, 03:03:59 AM

Previous topic - Next topic

csfreebird

Hello

  I want to send two bytes which represent an unsigned short in big-endian to server via TCP. But net-send only supports string parameter.

  Could anyone tell me how to do this?

cormullion

#1
Does pack help?

bairui

#2
I'm going to guess here, csfreebird, that you can use the (pack ...) and (unpack ...) functions for this. See the newLISP User Manual for these functions. From a quick look, it would seem you'd use:


(pack ">d" your_short)

For a signed big-endian short.



Heh... and on clicking Submit, it seems that Cormullion agrees. :)

cormullion

#3
i know nothing about TCP :)

csfreebird

#4
Thanks for so quick reply.

But after packaging my short integer, I need a way to send the bytes to server via TCP.

net-send always needs a string.

And the pack returns a string too.

>(pack ">d" 5)
"0005"


Which API could let me  to send my byte array?

I am new to newLISP.

bairui

#5
I have never done net coding, but I thought that was exactly what the (pack ...), (unpack ...) pair were for - to be able to send binary values encoded as strings to be decoded back into their proper forms at the other end. No?

csfreebird

#6
It works now.

> (set 'socket (net-connect "localhost" 8889))
16
> (set 'size (pack ">d" 19))
"0019"
> (net-send socket size)
2


pack returns a string buffer that contains my two bytes, net-send sends  the string to server.

My C++  server got two bytes, 0 and 19.

Thanks.

cormullion

#7
Good work guys. If you could answer the question on http://stackoverflow.com/questions/14413951/how-to-send-byte-array-via-tcp-when-using-newlisp">Stack Overflow, that would look good...!

csfreebird

#8
It's done.

Will go ahead with this.

I am about to simulate over 20,000 devices using newLISP, they will be used to test against my TCP server.