Procházet zdrojové kódy

添加Debug打印;

scbc.sat2 před 5 roky
rodič
revize
3a642e61d8
2 změnil soubory, kde provedl 100 přidání a 1 odebrání
  1. 3 0
      SATService/SATService/SATTCPServer.cpp
  2. 97 1
      SATService/tcp_client.py

+ 3 - 0
SATService/SATService/SATTCPServer.cpp

@@ -893,6 +893,9 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
 
 void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, Package* pak)
 {
+#ifdef _DEBUG
+	OutputDebugString("³É¹¦»ñÈ¡Êý¾Ý\n");
+#endif
 	DataHeader *pHeader = &pak->header;
 	if ( !pHeader ) 
 		return;

+ 97 - 1
SATService/tcp_client.py

@@ -12,6 +12,7 @@ import binascii
 DataHeader = np.dtype({'names': ['protocol', 'len', 'cmd'], 'formats': ['u1', 'u4', 'u1']}, align=False)
 UserInfo = np.dtype({'names': ['userName', 'password'], 'formats': ['|S260', '|S260']}, align=False)
 
+
 class BaseClient(object):
     __metaclass__ = abc.ABCMeta
 
@@ -106,8 +107,103 @@ class BaseClient(object):
             print "BaseClient=> socket disconnect error:", e
 
 
+class SATClient(object):
+
+    __metaclass__ = abc.ABCMeta
+
+    def __init__(self):
+        '''通信sock'''
+        self.sock = None
+        '''通信端口号'''
+        self.port = 5588
+        '''通信状态'''
+        self.constate = False
+
+    def __def__(self):
+        self.disconnect()
+
+    '''连接服务器'''
+
+    def connect(self):
+        try:
+            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            self.sock.connect(('127.0.0.1', self.port))  # 没有返回值;
+            self.sock.sendall("2222")
+            self.constate = True
+        except Exception, e:
+            print "BaseClient=> socket connect error:", e, self.port
+            self.constate = False
+
+        return self.constate
+
+    # 发送消息;
+    def sendmsg(self):
+        '''是否连接'''
+        if self.constate is False:
+            if self.connect() is False:
+                return None
+
+        '''拼装要发送的数据包'''
+        userinfo = np.array([("superAdmin", "123456")], dtype=UserInfo)
+
+        '''发送请求数据'''
+        try:
+            self.sock.settimeout(5)
+            phead = np.array([(0xAA, userinfo.itemsize + np.array([(0xAA, 0, 0x01)], dtype=DataHeader).itemsize, 0x00)],
+                             dtype=DataHeader)
+            '''一次性发送完整包'''
+            # self.sock.sendall(bytearray(phead.tobytes() + bytes(msg_json)))
+            '''分包发送:头、体'''
+            self.sock.sendall(phead.tobytes())
+            self.sock.sendall(userinfo.tobytes())
+            self.sock.settimeout(None)
+        except Exception, e:
+            print "BaseClient=> send Error:", e
+            self.disconnect()
+            self.connect()
+            return None
+
+        '''接收返回数据'''
+        try:
+            # 等待数据返回;(串口若请求失败,超时值应该设置在3秒以上)
+            self.sock.settimeout(10)
+            data = bytes(self.sock.recv(1024 * 8))
+            print "recv:" + binascii.hexlify(data)
+            self.sock.settimeout(None)
+
+            phead = data[0: np.array([(0xAA, 0, 0x01)], dtype=DataHeader).itemsize]
+            respone = data[np.array([(0xAA, 0, 0x01)], dtype=DataHeader).itemsize:]
+
+            '''
+            注意:坑!
+                respone此时是16进制字符 '\x01',Python的字符与C++的不一样,字符就是字符;
+                要将16进制字符转成整型,使用ord函数
+            '''
+            print "respone:" + binascii.hexlify(respone), ord(respone)
+            '''小端<I, 大端>I, 网络端 !'''
+            protocol, len, cmd = struct.unpack('<BIB', phead)
+            loginresult = ord(struct.unpack('<c', respone)[0])
+            '''返回头是否有效'''
+            if protocol != 0xAA and len != data.__len__():
+                return None
+
+            return loginresult
+        except Exception, e:
+            print "BaseClient=> recv Error:", e
+            return None
+
+    '''断开连接'''
+
+    def disconnect(self):
+        try:
+            self.sock.shutdown(2)
+            self.sock.close()
+        except Exception, e:
+            print "BaseClient=> socket disconnect error:", e
+
+
 if __name__ == "__main__":
-    bc = BaseClient()
+    bc = SATClient()
     bc.sendmsg()
 
     print "ok!"