Binary data exchange

2014-05-29 Thread rasikasriniva...@gmail.com
friends

I have a pair of simple python programs as follows:

#!/usr/bin/python
# broadcast.py
import socket
from ctypes import *
import random

class PurgeData(Structure):
_fields_ = [(press,c_int), (ticks,c_int), (volume,c_float)]

myPort = 10756

sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr = ('localhost',myPort)
#sock.sendto(data,addr)

presdata = PurgeData()
presdata.press = 0
presdata.ticks = 100

for msg in range(1,20):
presdata.press = presdata.press+1
presdata.ticks = presdata.ticks+1
presdata.volume = random.random()
sock.sendto(presdata,addr)

#

#!/usr/bin/python
# Receiver
import socket

from ctypes import *

class PurgeData(Structure):
_fields_ = [(press,c_int), (ticks,c_int), (volume,c_float)]

myPort = 10756

sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr = ('localhost',myPort)
sock.bind(addr)
presdata=PurgeData()

while True:
data,addr = sock.recvfrom(1024)
memmove(addressof(presdata),data.strip(),len(data.strip()))
print presdata.press, presdata.ticks, presdata.volume

-

When I tried to run this I get some bizarre results:


1 101 0.343009024858
2 102 0.36397305131
3 103 0.495895296335
4 104 0.372055351734
5 105 0.933839201927
6 106 0.931187808514
7 107 0.876732826233
8 108 0.298638045788
1828716544 -754974720 0.183644190431
1845493760 1660944384 0.186560109258
1862270976 1056964608 0.18631502986
1879048192 1728053248 0.186902835965
1895825408 2097152000 0.18658298254
14 114 0.407857120037
15 115 0.833854913712
16 116 0.00646247947589
17 117 0.297783941031
18 118 0.58082228899
19 119 0.61717569828

the received data for the messages 9 thru 13 are not as expected.

I wonder if anyone can see what I am doing wrong?

Appreciate any hints. thanks, srini
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Binary data exchange

2014-05-29 Thread rasikasriniva...@gmail.com
BTW - My environment is:

H:\python
Enthought Canopy Python 2.7.6 | 64-bit | (default, Apr 11 2014, 20:31:44) [MSC v
.1500 64 bit (AMD64)] on win32
Type help, copyright, credits or license for more information.

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Binary data exchange

2014-05-29 Thread MRAB

On 2014-05-29 23:08, rasikasriniva...@gmail.com wrote:

friends

I have a pair of simple python programs as follows:

#!/usr/bin/python
# broadcast.py
import socket
from ctypes import *
import random

class PurgeData(Structure):
 _fields_ = [(press,c_int), (ticks,c_int), (volume,c_float)]

myPort = 10756

sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr = ('localhost',myPort)
#sock.sendto(data,addr)

presdata = PurgeData()
presdata.press = 0
presdata.ticks = 100

for msg in range(1,20):
 presdata.press = presdata.press+1
 presdata.ticks = presdata.ticks+1
 presdata.volume = random.random()
 sock.sendto(presdata,addr)

#

#!/usr/bin/python
# Receiver
import socket

from ctypes import *

class PurgeData(Structure):
 _fields_ = [(press,c_int), (ticks,c_int), (volume,c_float)]

myPort = 10756

sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr = ('localhost',myPort)
sock.bind(addr)
presdata=PurgeData()

while True:
 data,addr = sock.recvfrom(1024)
 memmove(addressof(presdata),data.strip(),len(data.strip()))
 print presdata.press, presdata.ticks, presdata.volume

-

When I tried to run this I get some bizarre results:


1 101 0.343009024858
2 102 0.36397305131
3 103 0.495895296335
4 104 0.372055351734
5 105 0.933839201927
6 106 0.931187808514
7 107 0.876732826233
8 108 0.298638045788
1828716544 -754974720 0.183644190431
1845493760 1660944384 0.186560109258
1862270976 1056964608 0.18631502986
1879048192 1728053248 0.186902835965
1895825408 2097152000 0.18658298254
14 114 0.407857120037
15 115 0.833854913712
16 116 0.00646247947589
17 117 0.297783941031
18 118 0.58082228899
19 119 0.61717569828

the received data for the messages 9 thru 13 are not as expected.

I wonder if anyone can see what I am doing wrong?

Appreciate any hints. thanks, srini


I don't understand why you're using the .strip method. That's for
stripping whitespace from text, but you're not sending and receiving
text, you're sending and receiving binary data.

Personally, I'd use the struct module.

--
https://mail.python.org/mailman/listinfo/python-list


Re: Binary data exchange

2014-05-29 Thread Ian Kelly
On Thu, May 29, 2014 at 5:09 PM, MRAB pyt...@mrabarnett.plus.com wrote:
 On 2014-05-29 23:08, rasikasriniva...@gmail.com wrote:
 the received data for the messages 9 thru 13 are not as expected.

 I wonder if anyone can see what I am doing wrong?

 Appreciate any hints. thanks, srini

 I don't understand why you're using the .strip method. That's for
 stripping whitespace from text, but you're not sending and receiving
 text, you're sending and receiving binary data.

And indeed, ASCII characters 9-13 are all whitespace.  The receiver
appears to be stripping off the first byte of the (presumably
little-endian) data and thus shifting the whole struct by a byte for
those entries.
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Binary data exchange

2014-05-29 Thread rasikasriniva...@gmail.com
Of course Cut and paste issue. Anyhow, i will look at the struct module. 
cheers, srini

On Thursday, May 29, 2014 7:09:21 PM UTC-4, MRAB wrote:
 On 2014-05-29 23:08, rasikasriniva...@gmail.com wrote:
 
  friends
 
 
 
  I have a pair of simple python programs as follows:
 
 
 
  #!/usr/bin/python
 
  # broadcast.py
 
  import socket
 
  from ctypes import *
 
  import random
 
 
 
  class PurgeData(Structure):
 
   _fields_ = [(press,c_int), (ticks,c_int), (volume,c_float)]
 
 
 
  myPort = 10756
 
 
 
  sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
 
  addr = ('localhost',myPort)
 
  #sock.sendto(data,addr)
 
 
 
  presdata = PurgeData()
 
  presdata.press = 0
 
  presdata.ticks = 100
 
 
 
  for msg in range(1,20):
 
   presdata.press = presdata.press+1
 
   presdata.ticks = presdata.ticks+1
 
   presdata.volume = random.random()
 
   sock.sendto(presdata,addr)
 
 
 
  #
 
 
 
  #!/usr/bin/python
 
  # Receiver
 
  import socket
 
 
 
  from ctypes import *
 
 
 
  class PurgeData(Structure):
 
   _fields_ = [(press,c_int), (ticks,c_int), (volume,c_float)]
 
 
 
  myPort = 10756
 
 
 
  sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
 
  addr = ('localhost',myPort)
 
  sock.bind(addr)
 
  presdata=PurgeData()
 
 
 
  while True:
 
   data,addr = sock.recvfrom(1024)
 
   memmove(addressof(presdata),data.strip(),len(data.strip()))
 
   print presdata.press, presdata.ticks, presdata.volume
 
 
 
  -
 
 
 
  When I tried to run this I get some bizarre results:
 
 
 
 
 
  1 101 0.343009024858
 
  2 102 0.36397305131
 
  3 103 0.495895296335
 
  4 104 0.372055351734
 
  5 105 0.933839201927
 
  6 106 0.931187808514
 
  7 107 0.876732826233
 
  8 108 0.298638045788
 
  1828716544 -754974720 0.183644190431
 
  1845493760 1660944384 0.186560109258
 
  1862270976 1056964608 0.18631502986
 
  1879048192 1728053248 0.186902835965
 
  1895825408 2097152000 0.18658298254
 
  14 114 0.407857120037
 
  15 115 0.833854913712
 
  16 116 0.00646247947589
 
  17 117 0.297783941031
 
  18 118 0.58082228899
 
  19 119 0.61717569828
 
 
 
  the received data for the messages 9 thru 13 are not as expected.
 
 
 
  I wonder if anyone can see what I am doing wrong?
 
 
 
  Appreciate any hints. thanks, srini
 
 
 
 I don't understand why you're using the .strip method. That's for
 
 stripping whitespace from text, but you're not sending and receiving
 
 text, you're sending and receiving binary data.
 
 
 
 Personally, I'd use the struct module.

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Binary data exchange

2014-05-29 Thread Mark Lawrence

On 30/05/2014 00:25, rasikasriniva...@gmail.com wrote:

Of course Cut and paste issue. Anyhow, i will look at the struct module. 
cheers, srini



Please let us know how you get on, please don't top post, and please 
either use the mailing list 
https://mail.python.org/mailman/listinfo/python-list or read and action 
this https://wiki.python.org/moin/GoogleGroupsPython to prevent us 
seeing double line spacing and single line paragraphs, thanks.


--
My fellow Pythonistas, ask not what our language can do for you, ask 
what you can do for our language.


Mark Lawrence

---
This email is free from viruses and malware because avast! Antivirus protection 
is active.
http://www.avast.com


--
https://mail.python.org/mailman/listinfo/python-list