1
0
mirror of https://github.com/haiwen/libsearpc.git synced 2025-04-29 19:13:19 +00:00
libsearpc/demo/pysearpc-demo-client.py
2012-06-10 09:11:12 +08:00

60 lines
1.5 KiB
Python

import sys
import socket
from struct import pack, unpack
sys.path += ['..']
from pysearpc import SearpcClient, searpc_func
SERVER_ADDR = '127.0.0.1'
SERVER_PORT = 12345
def recv_all(sock, length):
"""
read all n bytes of data from sock
"""
data = ''
while len(data) < length:
more = sock.recv(length - len(data))
if not more:
raise EOFError('socket closed %d bytes into a %d-byte message' % (len(data), length))
data += more
return data
class SampleRpcClient(SearpcClient):
def call_remote_func_sync(self, fcall_str):
"""
called by searpc_func to send the request and receive the result
"""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# connect to server
s.connect((SERVER_ADDR, SERVER_PORT))
# send the header
header = pack('!h', len(fcall_str));
s.sendall(header)
# send the JSON data
s.sendall(fcall_str)
# read the returned header
header_r = recv_all(s, 2)
#read the result
ret_len = list(unpack('!h', header_r))[0]
if ret_len <= 0:
raise AssertionError, "returned data length <= 0"
ret_str = recv_all(s, ret_len)
return ret_str
@searpc_func("int", ["string"])
def searpc_strlen(self):
pass
client = SampleRpcClient()
res = client.searpc_strlen("hello world")
print 'result from server:', res