diff --git a/supwisdom/protocol/nettrans.py b/supwisdom/protocol/nettrans.py
index 0d1df81..4973c8c 100644
--- a/supwisdom/protocol/nettrans.py
+++ b/supwisdom/protocol/nettrans.py
@@ -5,14 +5,10 @@
 import traceback
 import simplejson as json
 
-
-def _unicode_str(value):
-    if isinstance(value, str):
-        return value.decode('utf-8')
-    elif isinstance(value, unicode):
-        return value
-    else:
-        return unicode(value)
+"""
+后台服务的字符编码
+"""
+SERVICE_ENCODING = 'utf-8'
 
 
 class message_writer:
@@ -21,6 +17,14 @@
     def __init__(self):
         self.clear()
 
+    def _unicode_str(value):
+        if isinstance(value, str):
+            return value.decode('utf-8')
+        elif isinstance(value, unicode):
+            return value
+        else:
+            return unicode(value)
+
     def clear(self):
         self._attr = {}
         self._row_data = []
@@ -31,13 +35,13 @@
     def attr(self, name, value):
         if name in self._attr:
             raise ValueError('Attribute [%s] already exists' % name)
-        self._attr[name] = _unicode_str(value)
+        self._attr[name] = self._unicode_str(value)
         return self
 
     def row(self, name, value):
         if not (name in self._col_names):
             self._col_names.append(name)
-        self._row[name] = _unicode_str(value)
+        self._row[name] = self._unicode_str(value)
 
     def add_row(self):
         if not self._row:
@@ -77,7 +81,7 @@
         """
         if not self._frozen:
             self._normalize()
-        seri = json.dumps(self._attr, ensure_ascii=False, encoding='utf-8')
+        seri = json.dumps(self._attr, ensure_ascii=False, encoding=SERVICE_ENCODING)
         return seri
 
     def root(self):
@@ -92,6 +96,14 @@
     def __init__(self):
         self.clear()
 
+    def _unicode_str(value):
+        if isinstance(value, str):
+            return value.decode(SERVICE_ENCODING)
+        elif isinstance(value, unicode):
+            return value
+        else:
+            return unicode(value)
+
     def clear(self):
         """ 清空数据
         """
@@ -107,7 +119,7 @@
         """
         self.clear()
         try:
-            message = _unicode_str(message)
+            message = self._unicode_str(message)
             obj = json.loads(message)
             #obj = json.loads(msg.replace('\\',"\\\\"))
         except Exception, ex:
diff --git a/supwisdom/protocol/smart999protocol.py b/supwisdom/protocol/smart999protocol.py
index 176b7a1..c5a8ee3 100644
--- a/supwisdom/protocol/smart999protocol.py
+++ b/supwisdom/protocol/smart999protocol.py
@@ -98,16 +98,18 @@
 
 class ProtocolError(BaseException):
     def __init__(self, msg):
-        super(ProtocolError,self).__init__()
+        super(ProtocolError, self).__init__()
         self.msg = msg
 
 
 class Smart999Connection(object):
-    def __init__(self, ip, port):
+    def __init__(self, ip, port, debug=1):
         self.ip = ip
         self.port = port
         self.sock = None
-        self.errmsg = None
+        self.errmsg = ""
+        self.debug = debug
+        self._last_exec_err = 0
 
     def connect(self, timeout=10.0):
         try:
@@ -115,12 +117,15 @@
             sock.settimeout(timeout)
             sock.connect((self.ip, self.port))
             self.sock = sock
+            logging.info(u"连接[%s:%d]成功" % (self.ip, self.port))
             return True
         except socket.error, msg:
             self.errmsg = unicode(msg)
+            logging.info(u"连接[%s:%d]失败[%s]" % (self.ip, self.port, self.errmsg))
             return False
 
     def disconnect(self):
+        self._last_exec_err = 0
         if self.sock:
             try:
                 self.sock.close()
@@ -132,12 +137,18 @@
         return self.sock != None
 
     def log(self, data):
+        if not self.debug:
+            return
         try:
             print "CMD[%s]" % codecs.encode(data, 'hex')
         except:
             pass
 
     def send_command(self, request, response, timeout=10.0):
+        if not self.is_connected():
+            if not self.connect(timeout):
+                logging.error(u"尝试重连设备失败")
+                return False
         protocol = Smart999Protocol()
         cmd = protocol.pack(request)
         self.log(cmd)
@@ -165,11 +176,15 @@
                     self.errmsg = u"接收数据未收到结束符"
                     return False
                 self.sock.settimeout(timeout - est)
+            self._last_exec_err = 0
         except socket.error, msg:
-            if msg.errno == errno.ECONNABORTED:
-                self.sock.close()
-                self.sock = None
+            if msg.errno != None and msg.errno != errno.EWOULDBLOCK:
+                self.disconnect()
                 logging.error(u"远程连接[%s]已关闭！" % self.ip)
+            else:
+                self._last_exec_err += 1
+                if self._last_exec_err > 50:
+                    self.disconnect()
             self.errmsg = unicode(msg)
             return False
         except Exception, ex:
diff --git a/supwisdom/protocol/webservice.py b/supwisdom/protocol/webservice.py
index 99ee4ea..657fc68 100644
--- a/supwisdom/protocol/webservice.py
+++ b/supwisdom/protocol/webservice.py
@@ -203,5 +203,5 @@
         if isinstance(funcdata, unicode):
             request_token['funcdata'] = funcdata
         elif isinstance(funcdata, str):
-            request_token['funcdata'] = funcdata.encode('gbk', 'ignore')
+            request_token['funcdata'] = funcdata.decode('gbk', 'ignore')
         return json.dumps(request_token, ensure_ascii=False)
