- 在线时间
- 471 小时
- 最后登录
- 2025-8-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7623 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2867
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1160
- 主题
- 1175
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- #coding=utf-8
; M& F! s1 \$ S5 C( W - 5 @) U$ f( r0 d
- \" x0 b4 E: R3 z& x5 D! ?
- import sys,threading,time;8 n' Z7 u3 F; ^( `& B
- import serial;
( h8 ? U3 n+ i4 J! D+ |/ M - import binascii,encodings;) S' n, k8 T! e. C- ]( H
- import re;! u4 M( Z) C5 c( T% {
- import os;$ D* k0 S5 a8 W7 T5 Z7 z# s5 C
- from socket import *7 [& f) R. K; n- ~. ]) B
- from struct import *;
, U! J8 @: k2 H; B - #from myutil import *;
- J! ^ i0 g! p; f2 L+ o - #name: myutil.py) @* R( l E6 |2 T
- 1 N& _! p! l- v\" V0 \& i; E
- mylock = threading.RLock() ( i: H\" v\" W9 |' j9 m, _
-
, T\" U& O+ q; G2 r6 Z4 t# g: w8 | - Server_IP = ''& k3 R4 Y7 a* e! G9 Q8 U
- Srever_Port = '': G0 c l4 J2 B
- 1 n+ p ?' o$ _& ~& J) |& |: g4 P, n
- def print_hex1(s,prev='0x'):: [: t4 @$ x J4 K3 M d
- for c in s:& U- C5 R: d* O( C. S( _# j\" D
- print '%s%02x' %(prev,ord(c)),2 w7 X7 a8 T) ^' I2 c! T! ]
- print9 @; A' t5 q5 |! b6 e
- def print_hex(s):# b+ [- U7 | |: M
- for c in s:
$ t( N' e9 }2 f8 c% {% {6 y$ x - print '%02x' %(ord(c)),
5 c3 P/ O/ n8 u5 o8 l/ c/ P% o7 V - print$ a$ e$ f$ z$ I. ?
-
- u. @0 x. Q9 i3 a( \ - def hexto_str(s):
5 B8 d/ X; E7 |4 _4 a$ S - r =''( c% l5 B, q8 |, R
- for c in s:
\" l, G: f3 p8 q5 m - r += '%02x' %(ord(c))
9 L( y1 G) e' X+ e1 j5 U U - return r
. z8 [$ n) I; O8 {6 ^: R - def strto_hex(s):9 [3 ^; O0 Q1 i# j: {/ d
- r = s.decode('hex')
4 e s0 h9 |% A6 \9 R: g - return r( O: Z4 U% x( V& y' a& G! c
- #''代表服务器为localhost
4 @7 i% Y$ _& n; o2 ~1 p - , y- }( N/ E' k0 f
- #在一个非保留端口号上进行监听% a% C8 P% r2 J\" P5 F- X+ V
- 9 X* Y# H! u# w( S
-
\" d5 r6 j+ I! J7 }* U6 g - class ComThread:; D/ U. u: Y\" A# p1 ~+ W
- def __init__(self, Port=0):
\" e( x2 J) u4 G+ o3 k0 ^) e - self.l_serial = None;9 o( p- D% C' X. Z5 o% d\" |/ v, d
- self.alive = False;
6 I% c/ `4 P7 l9 _* k - self.waitEnd = None;, H* {0 o/ H0 E7 i
- self.port = Port;
6 ~* R) m! _8 k2 C -
: ]5 `$ r% G! v O5 a( o - #TCP部分8 d/ n5 {! r7 U: s% k+ ]* Q\" H
- #self.sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1 c& B- x' B2 v - self.connection = None, v y i2 Q; \. m. w9 n
- #数据6 G2 b2 T R# G. S9 i
- self.snddata = ''
9 B1 V+ P5 u( q. C - self.rcvdata = ''
2 R5 Q- ]! x6 G( I1 k -
4 Y6 y( O' d' V\" v - def waiting(self):/ X: ~+ s& d/ _\" @( Z: ]
- if not self.waitEnd is None:
2 \- M\" `; }5 Z8 J2 q - self.waitEnd.wait();$ k! s: M3 N6 d' Z5 W
-
6 ]; y+ M9 J: z, g2 f0 Y - % e/ b9 f( s* }- s
- def SetStopEvent(self):+ i: x! c2 U9 i8 ^1 v
- if not self.waitEnd is None:
, U v5 T) q0 r, ^6 \8 z; V - self.waitEnd.set();2 f4 C3 t\" q* d7 F2 F/ l
- self.alive = False;
$ g2 Y Q$ F& N6 x( O: b6 W - self.stop();
0 p9 ~! R( t6 j% z, M5 ? -
$ z& _: d( }\" j+ X - , H# ?3 f w! A) G. @/ F
- def start(self):, _7 o: C4 j, O5 {, E6 f! U
- self.l_serial = serial.Serial();
/ \+ E$ s6 [* G& T' C6 x5 a - self.l_serial.port = self.port;
% A2 U3 R$ e7 t. P1 @ - self.l_serial.baudrate = 115200;, R' \8 p! e+ `: Z, G
- self.l_serial.timeout = 2; #秒2 o2 ]6 I2 M; n\" q% M& c0 |
- self.l_serial.open(); ~0 h\" m. {1 h2 A, }4 w7 F
- ) ]/ K& w( o y' G\" s
- if self.l_serial.isOpen():6 q/ M( s% T6 Z% @
- self.waitEnd = threading.Event();
7 `& y8 q2 l1 L' p2 c# D - self.alive = True;
/ s9 `4 r0 P, f8 F& [2 t+ o - print 'open serial port %d ok!\n' %(self.port+1)5 [1 @2 @0 }+ B! W8 U
- print 'baudrate:115200 \n'
& k, @/ v% a0 ]# B - self.thread_read = None;
j- @& K& C' g) }7 g - self.thread_read = threading.Thread(target=self.FirstReader);
- ~# R( g. r& n' r1 K - self.thread_read.setDaemon(1);; E4 w1 H* `* p, V5 i
- self.thread_read.start();
3 v& {4 B$ {! g& `* t- u - ) m5 w6 H/ K( Q: j4 v9 y+ g
- self.thread_write = None;% f& S/ K7 G1 X2 A\" o- r; @& l
- self.thread_write = threading.Thread(target=self.FirstWriter);
% n( d( y2 R. o. V, g* | - self.thread_write.setDaemon(1);6 R( J+ p o' d( q o
- self.thread_write.start();
. d, j* ?7 _3 D3 Z1 Z: w, `) |& G - ! H2 G/ p8 W! W+ A5 { K
- #TCP部分
( w. T& Z% A4 T; J& Q# L$ l - self.thread_TcpClient = None;, T1 Z. K6 I. S2 Y9 N
- self.thread_TcpClient = threading.Thread(target=self.TcpClient);2 H' F# T0 |' M6 B0 ]
- self.thread_TcpClient.setDaemon(1);6 O* K6 T8 {& k5 T4 }3 y
- self.thread_TcpClient.start();
9 r; G3 ~' n8 M9 X* A( l. A8 U( U - - g) q+ j8 |3 \$ s8 }$ x: d
- self.thread_TcpSend = None;
( G5 Q! u/ W$ ^4 }! X; E$ G - self.thread_TcpSend = threading.Thread(target=self.TcpSend);5 S! W2 x/ m$ Y
- self.thread_TcpSend.setDaemon(1);* K/ F% Z0 u( v
- self.thread_TcpSend.start();) ?% J\" _4 ?; C4 n. k
-
+ y5 h0 p# u8 b- Q - return True;
, }( t# N/ f C5 w - else:
, o6 ]8 X6 |$ K% F4 _3 d$ [- O - return False;: J& q; Y5 I2 D- f
-
) w' H# E; k2 s7 s$ _- l- V9 Q - - N$ W\" c+ X9 A0 P2 R# z2 h
- def FirstReader(self):. W: p( v4 @2 S+ |
- while self.alive:. H3 t% \; Y) ^: M& X; u4 X
- # 接收间隔% \3 j4 [0 u0 z7 o
- time.sleep(0.1);: z) B0 V\" J6 g\" {+ ~# @% l7 \* z: S. H
- try:
, k m: v! U. J7 R# g* d1 Y - data = '';
' w$ H: X7 @& I2 i+ _9 X - n = self.l_serial.inWaiting();
; h% F7 c2 N: L; T1 h# y - if n:+ ^! {( b5 [4 T. Q
- data = data+self.l_serial.read(n);
7 I R5 O' v# y: V - #for l in xrange(len(data)):
9 Q/ Q4 e5 J% n\" y4 x& Z7 |+ p4 K1 ~$ \ - #print '%02X' % ord(data[l]),
4 Y h1 A. y* |- E - # 发送数据9 |# u/ O0 X+ M, Q3 t
- print u'->请求:'
$ A, I# h* ?& {$ C# h - print data;& P8 H7 Q5 Q8 Y6 g6 F
- mylock.acquire()
8 W% F( E6 V) {, D/ _6 F - self.snddata = data
\" M8 s, g( P, x+ e& n7 C. P - mylock.release(), y& Q7 F0 X+ I. \
- #print_hex(data);* D9 j7 |# u\" Q9 S: \# t
- 6 L+ }0 j+ b9 G5 N3 a+ [* y
-
* a9 m) \9 M5 A/ q6 ?! P8 j - # 判断结束# B% r# H, F2 t, P' v
-
6 B& B\" i. W: K& @- R! ` - except Exception, ex:; A9 N8 V8 `2 j' u
- print str(ex);. t+ Y# e( U\" p) r; P2 p8 c
- 6 c' w; c. z* t- Q1 _+ t2 h
- self.waitEnd.set();
- Z: Q3 E& |& L. z - self.alive = False;
. S/ d/ b3 K2 E: k+ b+ _ - & L+ [* n\" T6 \7 ?
- def FirstWriter(self):: f. _\" V# Q$ S# u O3 A
- while self.alive:
% n' e5 _# h- j - # 接收间隔
* ]\" h2 a2 @& @# b+ f# f - time.sleep(0.1);# l; p5 p0 g! g- D
- try:. r/ l4 z) g6 |, j2 S. J1 z
- #snddata = raw_input('\nenter data send:\n')
5 g) X; t; d5 o1 u& P, g$ d - if self.rcvdata!='':
1 k$ t {2 |6 B9 h' f - self.l_serial.write(self.rcvdata);
# H4 t, `; a1 [/ ^0 H5 R+ j - print u'-<应答:'
- ]; u5 ?% w2 [! I - print self.rcvdata;7 U j9 L7 |8 r: J
- mylock.acquire() 9 A4 h. }0 h& N9 B
- self.rcvdata = '';
$ e6 u/ y- t4 a- z) Q: v - mylock.release()2 _& \9 N p0 e `3 }4 S: f6 |6 Y9 E
- #print_hex(snddata);
6 K6 ?% u7 G/ U, c) a5 ~/ X9 b8 A - , i% ` I. N, i+ p7 e4 ^+ d
- except Exception, ex:& T- M* @+ m* w, b' C
- print str(ex);
; w! W$ O T, @- s\" [\" R - self.waitEnd.set();1 {- \6 x1 H @
- self.alive = False;
, Y) |8 _0 r3 q! t\" z -
8 @ j( X' o# z6 f( ]( }+ ]2 E - def TcpClient(self):
, @# }) e/ z ~+ K - while True:
# C1 `4 J' M7 ]+ ~/ R$ U) ] - # 接收间隔8 _9 U ~) J3 t# a\" T( r9 w
- time.sleep(0.1);$ ^4 D/ O `) C' k6 u9 r! y
- self.connection = socket(AF_INET, SOCK_STREAM);) F2 ?' v+ T4 ~* _! y M
- self.connection.connect((Server_IP, int(Server_Port)));9 L, M$ l9 ?& ?( S! y
- print 'Connect to Server OK!';
6 ?- W: O0 e9 x$ O - self.snddata = ''0 n+ @$ ]0 @0 U' ~2 h! x
- self.rcvdata = ''1 |5 M6 Z9 H ` q\" H6 X* J
- while True:4 W5 f; a! C' D\" s* s! D8 ?3 A
- #读取客户端套接字的下一行5 [5 X+ g0 f3 n) y
- data = self.connection.recv(1024)
% s( ?+ y5 z2 B' v\" t - #如果没有数量的话,那么跳出循环
0 f; f5 L3 ~8 I5 r& E; g) N* s - if not data: break0 O4 J# w2 I: X6 B' p9 ~
- #发送一个回复至客户端/ \: t0 L; d* g6 d! ]/ C6 ^
- mylock.acquire()
2 }! f& w$ o9 q& z& u - self.snddata = ''7 b! b0 G, |4 Y. ?2 F
- self.rcvdata = data
9 A/ W- e% I. Y - mylock.release()
+ U+ ^: G6 ^$ T+ p - #connection.send('Echo=>' + data)
; V) d( c* a/ P$ C& K - self.connection.close()
F( X' w8 M6 q9 @ - / w4 U1 f0 p' f& I0 Z1 K; g
- self.waitEnd.set();
$ c& b# _4 x; H\" ]8 I/ s8 A - self.alive = False;8 i6 r, N; A5 {6 Y' Q
- 8 Q. U: x# ]3 @9 M
- def TcpSend(self):
# s4 t% \5 y4 |& p\" Q! \6 B. S - while True:
# k4 G! l- o. f) T' c0 l- Z - # 接收间隔$ H8 j( P; X6 M2 X\" @
- time.sleep(0.1);+ x* W/ q5 v5 n. N
- while True:
9 T5 f6 K' p* q( M% R% s2 C - time.sleep(0.1);, Z) x4 ?% X* I8 F+ q
- try:
' R+ Y* [' h2 Z4 Y) U3 l - if not self.connection is None:
: L+ }( s% p1 d - if self.snddata != '':2 o0 c7 k' o; [
- self.connection.send(self.snddata)5 v( `) J) V- R6 J1 G+ W
- mylock.acquire()
1 D1 W$ R3 u: a - self.rcvdata = ''
6 i/ O4 J$ L. w, B: I - self.snddata = ''9 E) w& r0 I\" x7 B) G: | m
- mylock.release()
# S; t) B6 C. f, d. u* \) g# F - except Exception, ex:
) z* @. x7 ?# s# \; g- y- G - pass 2 f6 j$ m9 l; \( Z: e- W
- def stop(self):8 N+ ]) U- m4 m
- self.alive = False;
# \) r! U9 \, w# m - self.thread_read.join();5 [2 u5 o7 t4 F9 I
- if self.l_serial.isOpen():\" r+ E\" M9 [! ]
- self.l_serial.close();: R$ F\" ~3 p4 p
- * u3 {7 d; u$ R2 Z, o0 ~
- 9 W# D( o& O0 X4 C0 W3 T
- ) w+ n\" O5 B$ T0 K @\" c
- #测试用部分7 ], d1 ` A; u5 m, v1 A4 s5 {
- if __name__ == '__main__':
' ]+ v' i! Y0 t% x5 f4 j# \ - print 'Serial to Tcp Tool 1.00\n' 3 z) s+ D, [( A: @, r3 V: j, B0 U
- print 'Author:yangyongzhen\n'
4 ]! L, k% S; t2 Q! U9 g& v5 w - print 'QQ:534117529\n'4 Q& o. f( `- s# }2 q\" J! e
- print 'Copyright (c) **cap 2015-2016.\n'- K3 b6 I* E5 g
- 2 j& b, O- ?, u, `
- Server_IP = raw_input('please enter ServerIP:')8 l4 e/ `& L- B4 w% O( A/ t5 g
- print 'Server_IP: %s' %(Server_IP)
$ w$ t3 f+ t* G* n - Server_Port = raw_input('please enter ServerPort:')
+ {9 @2 l6 D9 z5 L5 V2 A: U1 M - print 'Server_Port: %s' %(Server_Port)- F1 @- c8 n/ g# D( D5 y, h& ~+ O9 o
- com =raw_input('please enter com port(1-9):')
! w& `# e F$ Y: r8 h. F8 J - rt = ComThread(int(com)-1);) p4 t& Z! k; K7 `/ h/ ]' O) D
- try:& L5 A1 F% d$ x7 X
- if rt.start():
! C\" w9 l. w; \# |3 I$ \ - rt.waiting();
! M\" i( D4 [ z1 h3 V+ x$ U - rt.stop();
: D/ e' S6 h9 s% q1 a9 S - else:
4 o4 J, }% ]7 ~* P - pass; 3 ~7 ~\" `\" K& ]8 o7 z
- except Exception,se:
+ U ^8 G: \; r - print str(se);( g4 d8 Q, o7 Y7 a/ {
-
! X4 {6 X4 k' P q - if rt.alive:4 a- g$ \: ~6 z/ c a
- rt.stop();
6 d) P) w/ q) {* Q5 A/ d - os.system("pause"). L/ V: @' @) `. w7 {
- S9 A8 {\" @) E2 t
- print '';( Z7 { e. {6 `
- print 'End OK .';
# S* {. C0 {; h1 U6 r) Y: y5 y - del rt;
复制代码
* Z. e5 ]( R% h) m% C0 A4 q |
zan
|