socket Service-Client
发布时间:2020-05-25 00:07:57 所属栏目:Python 来源:互联网
导读:socket Service-Client
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 #!/usr/bin/env python
# coding: utf-8
#
# author: Tim Wang
# date: 2015-05-21
# filename: common_lib/net/sockettools.py
import socket
import sys
from thread import start_new_thread
import cPickle as pickle
def 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 _wrap
class 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()
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
