- 在线时间
- 471 小时
- 最后登录
- 2025-8-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7639 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2872
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1160
- 主题
- 1175
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- #coding=utf-8
- ]; ~9 t! F/ X& E2 ]# Q
; P! B) T1 B& I. D, m. s-
& k% X& o\" v4 V8 h# i7 [) B - import sys,threading,time;
4 b* K% P6 C% [' j3 m' b - import serial;
+ M\" v5 N1 P' } - import binascii,encodings;
8 E& O# K; a/ K9 {! X1 y - import re;
1 ]) h1 b\" S2 g, K$ [& a\" o' [. g( g. a - import os;
, q1 d, i' m/ P/ [) Q9 ^% N J! G) } - from socket import *8 ]9 `3 E9 x& _* ?
- from struct import *;
9 U: h' Q! K: h% P - #from myutil import *;) I! i) k/ ]9 l* Z7 X @: d4 j0 B6 n
- #name: myutil.py
# s3 c8 ~* W9 A -
7 m9 o; o' `( m8 {8 J* {( G - mylock = threading.RLock() # E; n$ f. [' w: i2 J8 y
-
c2 y n- d6 K) p3 U - Server_IP = ''9 g+ d/ U q M3 a
- Srever_Port = ''
% M) l! p, ]' B& I( O\" n/ K -
' ]1 V& I6 c. m) X' q1 v4 O - def print_hex1(s,prev='0x'):
; m7 u* O E# i9 O3 j! s7 B - for c in s:
9 C; o0 o G, c' q+ g - print '%s%02x' %(prev,ord(c)),$ r$ M, h, B# b2 A# x
- print% B. U' ~\" o5 J$ A; d! T6 r7 f- P
- def print_hex(s):0 k( y3 M$ o% u$ _! c& _
- for c in s:
2 S* v; A; X: v - print '%02x' %(ord(c)),
# \9 J0 b e. l1 D: O) ~7 |' U! c - print# t6 i! R( C# i3 k% o8 X
- 7 k# p, {9 j$ n& V3 Y
- def hexto_str(s):3 x9 P; U, T* x\" E
- r =''
) z% o1 C1 H9 e% E - for c in s:1 i% c k\" N0 u
- r += '%02x' %(ord(c)). m6 B8 s& \$ l9 k# p7 A8 A [% K
- return r
' Z! U+ }2 |, c3 `; W3 Q4 ]8 T$ Q- j - def strto_hex(s):# C' o6 E9 y/ b. _ k: r( L3 E* l
- r = s.decode('hex')% G) |, f% [\" [4 e% E ?5 w8 R \
- return r
1 W- l) Q3 D Q. G5 U) i4 D - #''代表服务器为localhost
* ^0 R\" g: L1 s7 Q7 Q - ( [6 u/ T\" D5 k `, |' Q) o* m& e
- #在一个非保留端口号上进行监听- b, P8 y5 f9 }# h- r; q: V
-
+ K$ B/ Q& s/ n2 n9 w -
& }2 {2 |9 q; H$ O% t( I - class ComThread:
2 q: W! ?9 ~2 A( [ - def __init__(self, Port=0):
* l+ S3 [3 i7 W8 c# I3 a - self.l_serial = None;
6 l7 i$ M: f2 i( r9 j( e - self.alive = False;
! Z; x2 i; R4 t: F; F, p! Y - self.waitEnd = None;
( P; [$ J* w; B\" g3 x - self.port = Port;7 [$ W! J: W+ T
- : }# j8 r9 D6 F9 d2 n
- #TCP部分7 b c4 _\" Z! F- E6 R2 }1 V# ?
- #self.sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
& N2 C0 y v, ^( e' q k - self.connection = None
2 l( N\" g( F% b9 e h, D# W - #数据& x* U& D, M; y: N1 N# b
- self.snddata = ''
4 [2 x& d! J8 \; q - self.rcvdata = ''
: J# I' ~! ]8 @' O; n -
q! X; ]+ A6 r! S* B5 \ - def waiting(self):+ v3 I( c0 E; Q3 B; j& t
- if not self.waitEnd is None:4 k3 k) Q- G1 r1 j! ]
- self.waitEnd.wait();% h- g/ [+ C6 x; P9 q. q' F# |
- . ^* P+ E; N, m1 q ]7 E
-
* c- O. L1 i. E1 t3 a, @ - def SetStopEvent(self):1 Z9 m) |/ n) z/ J2 m\" j0 c% G
- if not self.waitEnd is None:
( _9 U% f4 D( A) D - self.waitEnd.set();
j\" S2 h+ e. F5 ~ - self.alive = False;\" V, Y; D+ c$ n# a& U+ I# |- F
- self.stop();
$ Z. w- x$ \' @ l -
- u. E: N( T/ n: B8 \0 h- T4 k3 g -
3 e6 F0 ?7 C9 @4 B - def start(self):
% l2 v3 O8 k! b# u( m6 d; Q5 c D - self.l_serial = serial.Serial();1 [& ~, [8 z/ `- f, w
- self.l_serial.port = self.port;
3 R: N; W7 l8 X6 ? - self.l_serial.baudrate = 115200;
/ C1 o6 D( W\" v, T* | - self.l_serial.timeout = 2; #秒
: _\" L7 l9 Q# t! ^0 X, } - self.l_serial.open();
) A, U _% X) N/ L* Y. F7 L -
, B0 o\" ^% @9 p+ z - if self.l_serial.isOpen():' q# l( U5 y3 q9 Z
- self.waitEnd = threading.Event(); F( l. z% m% F\" \. {7 T+ E- _% v
- self.alive = True;
4 t& X8 G5 x- w. y( n# Q+ o: b - print 'open serial port %d ok!\n' %(self.port+1)
. \3 C( _. \9 b7 O2 \7 A: _5 W - print 'baudrate:115200 \n'1 f, v7 N: Z# n# b. Q M! V
- self.thread_read = None;
M( C- n7 U- [& ^ - self.thread_read = threading.Thread(target=self.FirstReader);
5 ~# J3 H2 a/ ?8 z- |+ k1 w4 u - self.thread_read.setDaemon(1);
* m7 ?: E3 `( a; c - self.thread_read.start();\" Z+ e l/ d* f$ X& o, h
- 6 I% K5 P\" ?! @6 r9 g
- self.thread_write = None;
6 @\" O0 Y. r* W7 P* S - self.thread_write = threading.Thread(target=self.FirstWriter);2 l, U6 \: C- B. @\" o0 L% I8 g' g
- self.thread_write.setDaemon(1);
) k8 h8 K% A1 m- }2 { - self.thread_write.start();
6 o# }. J2 r- v# X7 N8 U$ g' X\" i - ! X1 U* i* G\" ]% j$ k
- #TCP部分. L6 C- ^, \& V
- self.thread_TcpClient = None;
8 I8 r. g! H% S8 i+ C, h - self.thread_TcpClient = threading.Thread(target=self.TcpClient);
4 `/ V* i! o# z3 x - self.thread_TcpClient.setDaemon(1);
% _' O% G& i5 m - self.thread_TcpClient.start();
, W1 y1 H0 q( B& g- ?* e - 9 u/ X3 J+ i) N6 v# ?
- self.thread_TcpSend = None;
- v6 u g4 u# \( ^! g8 m\" X4 C$ B - self.thread_TcpSend = threading.Thread(target=self.TcpSend);, C! ]+ e* H\" J8 _9 }# z0 C
- self.thread_TcpSend.setDaemon(1);
0 T5 ?- R- v0 f K' L! i4 h - self.thread_TcpSend.start();
\" e* X! D& S& H! r - 7 Y: B% L) g6 d9 f* M
- return True;/ o+ w V0 J# q! {5 T6 m# V
- else:: U# v8 j! x6 {5 a+ u, l
- return False;) r7 B0 i3 c2 |! Q+ k% r: z
-
6 v/ V3 ]! K0 x8 M8 z- K) p3 a -
_0 w/ t# u- d9 b$ Z+ _/ A - def FirstReader(self):
& X2 M( E' e( v6 U - while self.alive:
% e5 i6 S\" i+ [& I- \8 ] - # 接收间隔3 e) P) J3 Y0 B1 ^+ j$ G9 ]* J
- time.sleep(0.1);
7 ^* c' W. ]+ [( q3 |9 R7 M - try:
! N0 B! T8 ?% d6 k0 {( H - data = '';4 T2 T- R# j& j$ ~3 T
- n = self.l_serial.inWaiting();3 T+ X6 l5 L# |: \9 o
- if n:\" I* u\" n) A5 R! D' P' n( u4 R
- data = data+self.l_serial.read(n);
/ v. K/ Y7 s0 p Q - #for l in xrange(len(data)):
2 d- P; h/ N: a) ~ - #print '%02X' % ord(data[l]),
/ q+ |6 t* h+ N { - # 发送数据 T1 G- k# U# s; x* s, x6 r\" G/ ^
- print u'->请求:'( Y3 L) `9 L2 f/ s6 m
- print data;6 h1 p) {- t2 f/ s- D0 g1 R
- mylock.acquire()
* J1 z9 I2 }& e4 \1 j) n - self.snddata = data5 h J' ~! t7 \% B& |/ I
- mylock.release()\" H- }+ K- j9 ?# f5 j- K5 |
- #print_hex(data);: `' f7 G& X0 v5 U
- 1 f: t# N7 h\" \
- $ [$ u5 u0 D& _9 V1 ~\" j; Y
- # 判断结束
' \) E. S0 t2 B1 U6 Z -
' X3 f J3 N& l5 ~: K3 [ - except Exception, ex:
. P- |, B+ t' i: Y* R2 k8 W - print str(ex);) E& k+ a4 [5 k u& H; q1 c+ l6 ]& h
- 8 ?9 _) q g; A
- self.waitEnd.set();
A) W6 {8 T z x9 G7 B5 P, z - self.alive = False;. c' |+ G\" S* R. K4 A1 p
- & S9 s/ q+ b9 u$ X* M
- def FirstWriter(self):5 q7 j# s3 b, q5 U
- while self.alive:
9 i6 ?; d3 q% q& O1 ^3 U! x - # 接收间隔4 H$ j: S; |5 j( m* `4 u
- time.sleep(0.1);
0 ~\" `1 |\" C. i0 _1 j7 U$ ] - try:$ M7 m& I$ o6 |5 i9 d8 G
- #snddata = raw_input('\nenter data send:\n') t5 P# q( }& P
- if self.rcvdata!='':
5 s9 g# l! L4 `* ]# e - self.l_serial.write(self.rcvdata);
+ k% N# v0 l- b - print u'-<应答:'- H* y/ ]5 P) `; t) Y; {# ]) O
- print self.rcvdata;
* a' a9 I( C. D - mylock.acquire()
$ Q\" I2 R\" d# G+ D- t; x& M/ l - self.rcvdata = '';
\" A7 U! H0 Q% z - mylock.release()
. n* a- G+ p- p2 f7 x5 D k5 {( S$ J( G - #print_hex(snddata);1 V/ U+ T; L( o! t! U6 v
- 4 B0 j2 K\" t% ^% d+ t. n& v, L) F\" X
- except Exception, ex:( R0 U1 R6 A4 W) N2 D. @
- print str(ex);! p9 ~2 Z8 h/ q* }+ J* f; X
- self.waitEnd.set();
6 t. S. s& f$ G. d. f( O3 t - self.alive = False;' z, @6 ]\" x1 w
-
3 c ?; N( v; q% D: E - def TcpClient(self):( L) S) z: P+ f: B/ f K; @6 F8 M
- while True:
$ O, L3 V6 |+ ]* v/ b - # 接收间隔# V2 F9 a$ x% G1 P\" U( F
- time.sleep(0.1);/ @3 O# J/ b5 A( Z1 k
- self.connection = socket(AF_INET, SOCK_STREAM);- l( \! [5 C0 p) \# r% \0 P1 {; H
- self.connection.connect((Server_IP, int(Server_Port)));& s) f6 k0 [; k7 d$ o4 u8 J2 U2 ?
- print 'Connect to Server OK!';
; v0 I/ ]2 r; l) `; `& Z - self.snddata = ''
% W\" \4 S- \+ f2 M1 O$ l- j - self.rcvdata = ''
5 W& q$ F1 w2 q7 w6 \% {2 v h% R - while True:! d- @6 G: @6 `1 h: x& t8 l4 A
- #读取客户端套接字的下一行
( e8 s& s4 Z* y6 K' H* | - data = self.connection.recv(1024)
$ b\" y9 ?0 G\" {8 c# R - #如果没有数量的话,那么跳出循环( {# G# f4 d) J; z5 `( }3 g
- if not data: break# t& Y4 W\" }+ a
- #发送一个回复至客户端
5 [) c* [. E r m6 b# e - mylock.acquire() \" F& X* \' X/ g+ G1 I
- self.snddata = ''4 [1 H$ j( m9 w; t( G1 w* L1 h
- self.rcvdata = data5 n6 _' B+ @' P @# e6 f
- mylock.release()
/ S\" }% w\" c! t: E, T7 O6 c1 q& m - #connection.send('Echo=>' + data)
' ?: N0 M0 \8 k1 Y+ {. ] - self.connection.close()
+ N: |( v5 m2 p6 C - ( Q% |$ w# E( q$ o0 \
- self.waitEnd.set();7 B3 p! }/ Y+ c\" b: T
- self.alive = False;
. b6 \5 o$ b$ k3 m* h -
/ B+ h- U+ ~- P* x; Y l - def TcpSend(self):\" C7 Z$ Z5 T3 F/ U8 [. Z+ g
- while True:
2 Z/ s0 R- _3 o\" `) X5 } - # 接收间隔+ _4 e0 ` l1 P. ^% D
- time.sleep(0.1);: y3 w\" }0 e* }; h2 ^4 s2 o
- while True:
+ v* J |0 B3 I) m2 J - time.sleep(0.1);
% r9 ~4 R# B7 M% M- a' i - try:$ B\" [$ A3 e! w3 t, J1 v; L& o8 Z. C
- if not self.connection is None:
# h8 ?$ |4 {( y - if self.snddata != '':# a' m, f! A; ^\" L* @# X1 X
- self.connection.send(self.snddata)- `' G0 q+ y q/ ~( ~; ^. r
- mylock.acquire()
* U5 _+ L9 i\" K+ @. p3 c - self.rcvdata = ''/ \\" _& B* Z, X# p
- self.snddata = ''
+ \4 q3 _4 t g; e - mylock.release()- y' X6 z+ D' i$ }9 W6 ?
- except Exception, ex:. Q+ \7 V& l3 Y( S+ _( ?( c
- pass
' H. _* ]/ J. Y1 B4 \ - def stop(self):; D9 x$ |2 y$ s; r4 }, T ?. }
- self.alive = False;
* k' t9 Q' c+ U! \ - self.thread_read.join();
/ L4 F5 [& Q+ j; g7 U - if self.l_serial.isOpen():
/ l' z( ^% \) L: H) t4 H7 ~$ @ - self.l_serial.close();( r0 p4 d\" i* Z9 B+ |
-
T) f, h5 e& y# f2 H -
\" Y/ m& n( f1 z2 X\" S - 3 u4 P7 `3 @+ ~$ a- p# i
- #测试用部分
\" W, r; s( q9 O9 V3 Y - if __name__ == '__main__':
, u% Y& h- { W' x; D$ r0 ]8 Q - print 'Serial to Tcp Tool 1.00\n' 0 }4 }9 n5 l/ y
- print 'Author:yangyongzhen\n'
3 Y. K# g- M$ b# m0 B - print 'QQ:534117529\n'! [0 [* Q( p% }
- print 'Copyright (c) **cap 2015-2016.\n'
1 h6 a- N4 G, j5 [ -
. d6 K) {2 v\" g6 ^. ?1 z0 [ - Server_IP = raw_input('please enter ServerIP:')
5 A7 y8 y& ?\" ^% M - print 'Server_IP: %s' %(Server_IP)# t- q3 l% M2 z2 R8 s0 M) Q! y2 \
- Server_Port = raw_input('please enter ServerPort:'). O) |$ i7 D' q
- print 'Server_Port: %s' %(Server_Port)
0 ~- ~4 }5 j. ^, t8 J - com =raw_input('please enter com port(1-9):')
3 J$ Z; \+ t' E7 D# t - rt = ComThread(int(com)-1);
& b9 y( A$ f8 C' ]7 x - try:
! a! a J. \- b\" } - if rt.start():
) {* f\" X3 q1 w2 V\" N: n - rt.waiting();' l1 h/ p6 b+ L0 B4 |% B
- rt.stop();$ z' v& o# t\" m* M* r/ Q2 U
- else:\" N4 [$ b; Q$ A# z# I! v
- pass; : Q\" Q' g) h$ n; b) R. N V7 }( b) M
- except Exception,se:2 }1 K+ l; I) G9 {: d# }4 \
- print str(se);\" {$ S2 s# g! E0 ^$ W* i5 p
-
4 o- x6 Q d+ d' Z' D3 @ - if rt.alive:
* Z/ I0 X9 M v$ i7 s7 @ - rt.stop();6 Q( [ N _: Z\" e7 Q% v; d
- os.system("pause")( m: m# S+ y\" ^
-
! w u4 ^6 d. ]- L, G p) y - print ''; ~7 ?\" o0 ]5 [4 y: ]
- print 'End OK .';
7 z0 d3 P, v( N7 N* A - del rt;
复制代码 ( Y% x1 J2 ]% O5 B- ?- U& X
|
zan
|