socket Service-Client,service-client,#!/usr/bin/e
文章由Byrx.net分享于2019-03-23 05:03:28
socket Service-Client,service-client,#!/usr/bin/e
#!/usr/bin/env python# coding: utf-8## author: Tim Wang# date: 2015-05-21# filename: common_lib/net/sockettools.pyimport socketimport sysfrom thread import start_new_threadimport cPickle as pickledef mksocket(): try: return socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error, msg: print 'Failed to create socket. Error code: %s ,' % msg[0] print 'Error message : %s' % msg[1] sys.exit(1)def clientthread(conn, func): while True: data = conn.recv(1024) if not data or not data.strip(): break conn.sendall(func(eval(data))) print "Peer:", conn.getpeername(), conn.close() print "disconnect."def pkl(func): def _wrap(argkwg): args, kwgs = argkwg result = func(*args, **kwgs) return pickle.dumps(result) return _wrapclass SocketService(object): def __init__(self, addr, listen=10, func=None): self.addr = addr self.sock = mksocket() self.func = None try: self.sock.bind(self.addr) except socket.error, msg: print 'bind failed. error: [%d] %s' % (msg[0], msg[1]) sys.exit(2) self.sock.listen(listen) self.register(func) def register(self, fn): default = lambda x: 'OK...' + x self.func = fn or default def sloop(self, func=None): if func: self.register(func) while 1: conn, addr = self.sock.accept() print addr, "connected." start_new_thread(clientthread, (conn, self.func)) self.sock.close()class SocketAgent(object): def __init__(self, addr): self.addr = addr self.sock = mksocket() self.sock.connect(self.addr) def __call__(self, *args, **kwgs): self.sock.sendall(repr((args, kwgs))) return pickle.loads(self.sock.recv(4096)) def __del__(self): self.sock.close()
评论关闭