| Line | |
|---|
| 1 | ###############################################################################
|
|---|
| 2 | # The communication module (communication.py)
|
|---|
| 3 | ###############################################################################
|
|---|
| 4 | import cPickle
|
|---|
| 5 | import socket
|
|---|
| 6 | import struct
|
|---|
| 7 |
|
|---|
| 8 | marshall = cPickle.dumps
|
|---|
| 9 | unmarshall = cPickle.loads
|
|---|
| 10 |
|
|---|
| 11 | def send(channel, args):
|
|---|
| 12 | #print "will send: ", args
|
|---|
| 13 | args+="\n"
|
|---|
| 14 | buf = args #marshall(args)
|
|---|
| 15 | #value = socket.htonl(len(buf))
|
|---|
| 16 | value = str(len(buf))
|
|---|
| 17 | #size = struct.pack("i",value)
|
|---|
| 18 | #rint "length: ",len(buf)
|
|---|
| 19 | #print "SIZE: ",repr(size)
|
|---|
| 20 | #channel.send(value)
|
|---|
| 21 | buf+="\0"
|
|---|
| 22 | channel.send(buf)
|
|---|
| 23 | #print 'sending: ',buf
|
|---|
| 24 | #print 'sent'
|
|---|
| 25 | def receive(channel):
|
|---|
| 26 |
|
|---|
| 27 | size = struct.calcsize("L")
|
|---|
| 28 | size = channel.recv(size)
|
|---|
| 29 | print "rec size: ",size
|
|---|
| 30 | try:
|
|---|
| 31 | size = socket.ntohl(struct.unpack("i", size)[0])
|
|---|
| 32 | #print "unpacked: ",size
|
|---|
| 33 | except struct.error, e:
|
|---|
| 34 | return ''
|
|---|
| 35 |
|
|---|
| 36 | buf = ""
|
|---|
| 37 |
|
|---|
| 38 | while len(buf) < size:
|
|---|
| 39 | buf = channel.recv(size - len(buf))
|
|---|
| 40 |
|
|---|
| 41 | return unmarshall(buf)[0]
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.