- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- #coding=utf-8
0 B' V$ e) @. ]2 b3 l9 { E1 W - # J) ?( u5 B* }( g6 W
- - F! \! F% a1 Q' @/ \* t
- import sys,threading,time;\" S8 f7 D. ~1 O( Y: j0 A* G
- import serial;
+ I6 A9 m2 n4 f }+ v - import binascii,encodings;
6 w! n l8 D& |; V/ b - import re;! y6 {* L- {! }' f- G
- import os;& Y, D9 x* n7 D& `4 K4 c) ~4 N X2 i
- from socket import *, X! i! W. y4 R7 R
- from struct import *;
- T( a\" M8 V! P$ k$ p/ G - #from myutil import *;8 j1 d* D' z0 H- y8 ?8 @/ O v4 O7 N
- #name: myutil.py! b9 [7 y$ R J
-
! n- z. ?0 |' p8 v: m3 k - mylock = threading.RLock()
_4 i- Y- B# C' x& E% d1 i3 `0 j - 7 Q% A\" r0 c) Z6 l: f
- Server_IP = ''# Q3 @ n\" J. K! [* _
- Srever_Port = ''
. s4 q3 i& q' `( Y/ O$ Z - 3 s' d0 H& O6 k7 f
- def print_hex1(s,prev='0x'):& M+ g( o* G4 S
- for c in s:5 z5 S. v3 ^* t- H. H; B, _/ Y+ a
- print '%s%02x' %(prev,ord(c)),6 P3 v6 f0 v- Y; h, h( p4 U9 H
- print2 b8 c. _9 U: B$ R7 r! l
- def print_hex(s):, q' c& _8 G8 V$ o6 C: G
- for c in s:
5 M2 `: z5 {# j\" \ - print '%02x' %(ord(c)),7 t @4 I$ J! B1 e: n
- print- F q) Z0 v: x3 U
-
0 [% B! k6 d8 `* } - def hexto_str(s):/ X! }\" Y2 Y% j7 B6 }! w
- r =''
9 d! P) N6 K+ ?6 C% o5 n2 Y - for c in s:
& m7 E* B& A$ f6 D9 Y - r += '%02x' %(ord(c))
7 M+ \! `8 [. W: _6 F$ K: d- q- z! H - return r' q4 W5 I0 S/ _$ @* O: \, B
- def strto_hex(s):7 u D: i9 U/ Y' k1 j8 ?3 l
- r = s.decode('hex'): E2 i1 [. z. L* k, Q
- return r; v3 g; U7 u' p; s& U8 ? _ j
- #''代表服务器为localhost+ B7 B9 m! N+ Z B' z/ N; `2 h
- \" l, z0 `, E) O2 d8 u0 n
- #在一个非保留端口号上进行监听
' W( A/ F- V2 E1 h2 Z\" j W* d -
$ C. |; a. J2 C% K -
, a; @7 {* B; A. S - class ComThread:
\" u; P6 f3 Z r - def __init__(self, Port=0):$ @2 E; k, r; h% A* }
- self.l_serial = None;
% S! f; Z0 {2 A6 I/ z - self.alive = False;
4 d. c5 c4 K+ E; H - self.waitEnd = None;
( d2 p9 ]: z% e: `0 N - self.port = Port;
& Q; q$ Z9 m8 m6 K) x3 d - , p+ Y; ]* G! Y- [8 \2 J4 `\" }( q8 P
- #TCP部分 [! Q8 s# z) \' ?; \* T\" C
- #self.sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)5 m+ ?# w; ~& j* }9 b+ O- t
- self.connection = None8 B' c% |- K0 `) c
- #数据5 f- F+ B8 F+ s\" F( Y! P; o6 X
- self.snddata = ''
3 Z1 M0 m* F. t6 d - self.rcvdata = ''8 {4 u+ j& U5 x2 D1 X& }3 U0 F7 H: _
-
' T7 n# W0 i' F* b1 Q: b: u - def waiting(self):: W! I k2 z9 m* m
- if not self.waitEnd is None:
' u( L# ^# M$ F\" O8 w* J4 N8 j9 f - self.waitEnd.wait();
\" J2 |; r; f d\" I, O6 G -
7 R# c, m$ i' C. ^5 Y\" |9 \/ O -
/ `. E0 b8 }1 q# x\" S$ y( \6 S5 d - def SetStopEvent(self):
2 z. t) \$ |& u - if not self.waitEnd is None:
- `9 I5 s- T/ n* f6 h3 D3 j - self.waitEnd.set();4 T; T6 N2 ]! @) @6 z
- self.alive = False;
1 j( l& x* ^, h$ W* ^/ Y, P- T - self.stop();
* g, H# H/ O9 u) }; h. { - 2 |+ k. X* a$ f1 M2 r/ w4 ?
- 9 X1 Y! ^9 n/ U v8 H/ `. w
- def start(self):- a1 l- h3 k% p C1 B6 h, F5 f
- self.l_serial = serial.Serial();
\" _; x7 o$ J- y2 t; h0 b - self.l_serial.port = self.port;, n* a# L; x; J
- self.l_serial.baudrate = 115200;/ f0 I3 F\" I1 f0 @( l
- self.l_serial.timeout = 2; #秒5 y* x$ Z& R8 Q$ k' X) k, P
- self.l_serial.open();1 r# f6 W: a# M& Y4 f# x* X
- 1 Z- g& L) ?5 V. U; p+ G
- if self.l_serial.isOpen():
- u4 I# o. r: f) Q2 D - self.waitEnd = threading.Event();
/ v! o5 z, o\" d# Q - self.alive = True;) J* s/ ?3 V- A\" C$ A/ u3 \
- print 'open serial port %d ok!\n' %(self.port+1)
2 ~5 ^\" T. t2 d8 ~+ ^3 k: }; S - print 'baudrate:115200 \n'* e& K. U$ X( e) C5 n+ W\" K
- self.thread_read = None;+ S4 a p5 A! [& q\" N+ o
- self.thread_read = threading.Thread(target=self.FirstReader);
2 i' K$ t/ Y6 r1 M# b - self.thread_read.setDaemon(1);1 G6 S: |8 H0 e8 L7 o2 i
- self.thread_read.start();
7 M; `. u. K9 F8 \. _. F -
1 w$ c' \( s/ [2 v6 A. ?% u5 \ - self.thread_write = None;& j\" b# b# v+ [/ r
- self.thread_write = threading.Thread(target=self.FirstWriter);
8 [6 H, a# p J) ^$ S( P& `0 I - self.thread_write.setDaemon(1);' O9 i, Z0 T# D: F) o3 o5 T
- self.thread_write.start();3 e6 ]\" \) |' k9 K\" d9 w
- 1 G2 H6 d& ~% R0 }; B- }- o4 Y- o
- #TCP部分5 L E5 x# O5 p0 E: w
- self.thread_TcpClient = None;3 s) V% }' m2 i) @
- self.thread_TcpClient = threading.Thread(target=self.TcpClient);9 [$ J1 ^, X$ u
- self.thread_TcpClient.setDaemon(1);
/ F! k. W! V! s1 Y1 n+ m - self.thread_TcpClient.start();
- g$ z7 ^* v* U4 t; _8 P -
- d' k n/ z5 k. I1 g0 H - self.thread_TcpSend = None;' e0 B) p. k% m+ D$ v1 Z% Z. }
- self.thread_TcpSend = threading.Thread(target=self.TcpSend);
, j+ L* N! {. ` - self.thread_TcpSend.setDaemon(1);5 |\" w7 y. w4 W
- self.thread_TcpSend.start();) T2 e. S\" T1 h0 V4 @1 R
-
, q- z- t4 G\" Z0 ^/ K& | - return True;! B& S! @2 p$ S$ f, X# M2 [\" ]
- else:
1 x* z, W) f) J5 R - return False;
& K6 J; Z# ^$ |& a -
' l\" ~ T/ A& u2 b3 H - 6 s& F: U1 N/ p- \0 ^+ G4 P
- def FirstReader(self):+ f% L9 C5 ?0 ^5 N8 ?8 l7 i4 ~- ^
- while self.alive:) f' j; L7 d9 T5 u q) e- A
- # 接收间隔
2 M9 y\" ^. L3 _: M) F# M: O - time.sleep(0.1);& {6 q) S$ E, q5 g6 P
- try:
, D$ n* s! i( S6 e* q* p) K - data = '';* i, G+ G, i0 }) p/ z
- n = self.l_serial.inWaiting();
$ H) M6 V; X0 j5 x& Z# O - if n:
, n# S7 o- T- E' L - data = data+self.l_serial.read(n);
( }$ b8 C5 F4 A+ c) D% b* ` - #for l in xrange(len(data)):
9 f7 M: c/ y5 d5 Q2 G - #print '%02X' % ord(data[l]),
0 {7 v! J9 s/ [4 K h4 X - # 发送数据
3 M0 g, g( J: R) l2 G - print u'->请求:'
$ \9 K# u j$ ^( g; [, g - print data;
$ K% u* m% ^# E: m - mylock.acquire() & [3 _# u2 j! q0 x+ M5 h
- self.snddata = data
. n: v) K5 U+ r; f, I; h6 T5 J\" n - mylock.release()
6 q- E% p, }\" i0 o - #print_hex(data);8 }1 V! t8 `4 c2 T6 \
-
/ K8 W5 p0 ~& H8 {* P$ D4 B6 q - % Q' V6 q, o: |+ e8 R* u5 E
- # 判断结束
6 i; P2 I& [; }' M B7 \. N, ?* @ - e0 o# J' M0 ?- U; L1 G
- except Exception, ex:+ M+ G+ _$ p! d
- print str(ex);
9 c3 x7 {* N3 s% E -
s8 E6 M4 j5 e l* @! K) a - self.waitEnd.set();5 N, ~8 \7 c! Q- D, Y* Y
- self.alive = False;
: V1 n\" ~\" d/ m3 F2 Q( h -
+ V5 v\" p. o' L. Z - def FirstWriter(self):; Z. e6 K) G# g2 H; }! u5 i
- while self.alive:
) c0 p\" P; i+ s2 f4 u3 x* [ - # 接收间隔! q+ \' X4 ]- _0 R* f, G1 e$ |
- time.sleep(0.1);
% z/ ^9 x A- |' r8 H - try:% R1 X9 d, s+ c5 x1 n\" e. R
- #snddata = raw_input('\nenter data send:\n')/ K$ N& @ }. R: j+ i: ?( F
- if self.rcvdata!='':, u/ L0 O7 @8 \+ E) t( c
- self.l_serial.write(self.rcvdata);
6 ^ r4 Y- F/ E - print u'-<应答:'
1 y# E' K7 Y/ t5 k% v - print self.rcvdata;
8 _& S M* e+ Z! P - mylock.acquire()
2 e- u, U) ]6 v a& g - self.rcvdata = '';/ n- p) u$ w) \\" k: b6 S# F
- mylock.release()\" B u8 Q8 ?' |$ Y2 |& f
- #print_hex(snddata);
0 Z6 ~9 G2 P: C2 p -
g1 |$ v/ F! o. Q9 P - except Exception, ex:
4 \) H% f0 C& A/ [0 z1 q) h* O - print str(ex);% S+ M2 U( V4 ] ]7 ?- d
- self.waitEnd.set();3 K# w$ Y/ @( ` j
- self.alive = False;% h; p; F: A& u+ a2 D\" |6 i
- 9 x& i* F2 L5 h7 X, m+ J$ {
- def TcpClient(self):
_0 J$ N! w$ b. c# [0 O - while True:& F3 U, b+ u1 U* y( i/ J$ q
- # 接收间隔' S8 n/ o- J( w* {5 S6 G\" c. j2 H4 Z
- time.sleep(0.1);\" S6 t4 W+ h- o8 S0 }; ]
- self.connection = socket(AF_INET, SOCK_STREAM);3 V' I5 |( a3 s5 ^- K+ M$ F
- self.connection.connect((Server_IP, int(Server_Port)));
1 h. c2 j& t- r! n: V5 V$ K - print 'Connect to Server OK!';* C! s# }2 A/ _9 ^6 A
- self.snddata = '') v, S% N' ^4 K0 Q
- self.rcvdata = ''' b& e7 J2 V8 [% G; k
- while True:\" m9 U7 m! n+ [$ @& C
- #读取客户端套接字的下一行
' x0 k- G% }! V& t* F& } k3 _; ` - data = self.connection.recv(1024)0 k( _' r% g5 f
- #如果没有数量的话,那么跳出循环
# i* W7 O8 C8 I& s - if not data: break
/ l9 j, Z; O' Y! G3 u - #发送一个回复至客户端
, G- A( ^/ y# }4 l - mylock.acquire() \" v( i0 ^5 Z. J% p\" \) q- C
- self.snddata = ''* _2 l3 l% |: P$ _( A
- self.rcvdata = data
3 S% ^\" m% m1 ^/ ?1 g( @! { - mylock.release()
) c$ X. D8 E$ Y3 s - #connection.send('Echo=>' + data)% h3 q3 ?( I9 p; \0 l# U) x
- self.connection.close()1 |' v: r. n0 W# |) F
- - d% ?# `% {) a, ~6 m2 C, D
- self.waitEnd.set();4 `# u1 ^8 y3 ]+ ]! |3 [! Q, G
- self.alive = False; ~0 P4 l% V+ m, Z; u. e! F( M1 S
- 4 n$ y* e* u2 ]8 l% z: ?9 E- `1 a- ?
- def TcpSend(self):* |# t5 p$ V0 u0 t$ R% Q0 \$ G) m$ f& Q. ~
- while True:5 I- H+ @# M E: F% D9 ^6 q
- # 接收间隔) k0 t$ T; ~2 `
- time.sleep(0.1);
$ q7 k/ `: M+ ?/ s/ A) p - while True:7 J\" M' s: G' C2 o9 Y, j
- time.sleep(0.1);
) O, q* u; r6 s - try:: V9 `7 N5 ~4 n i
- if not self.connection is None:
3 I) E3 g% h4 p5 B: [ - if self.snddata != '':
/ Q) a: X7 H! n1 t; N& ?, B - self.connection.send(self.snddata)+ Y: ?0 k: y. B5 ~6 L5 k2 I8 U$ a% e
- mylock.acquire()
: E, M+ K8 X! R% ]* I - self.rcvdata = ''
5 g+ h* P; `7 E\" o6 a$ h$ N; x$ C! @ - self.snddata = ''
/ g4 b6 w) S4 E2 ^1 g - mylock.release()
0 S- }3 I* g( Q; L1 S - except Exception, ex:
) a# ~8 F, n. I1 @0 j7 O% F - pass / |9 x# ^0 B+ o* `! E/ a
- def stop(self):
# T. H$ L+ I/ x9 ]1 m. ~ - self.alive = False;0 g5 @4 m+ T) W: Y0 T z
- self.thread_read.join();
$ Q/ {5 [% v9 v6 i4 z9 f - if self.l_serial.isOpen():% y) j# X, o' w. p/ d
- self.l_serial.close();
Q' K) N% }. b$ r4 R! e% h7 ?) r -
0 t\" m) W- Y0 f8 ^2 g8 J - * M/ k. W) Q9 J
-
& M* N6 n& y9 p6 \2 V4 e - #测试用部分; q$ V5 }) N( y' m
- if __name__ == '__main__':7 J: e8 b\" e; c! a( K5 I+ o; Z
- print 'Serial to Tcp Tool 1.00\n'
y; f v: ?' c4 G - print 'Author:yangyongzhen\n'* c G! R+ \# e( E4 @8 c( E9 B
- print 'QQ:534117529\n'! ~% a6 t+ L( S4 _# n
- print 'Copyright (c) **cap 2015-2016.\n'
, d. A/ s# R$ {1 g\" h- T0 ^ -
! }\" }8 ~% `2 J, w - Server_IP = raw_input('please enter ServerIP:')
' T\" i& X* k; P$ V$ a X - print 'Server_IP: %s' %(Server_IP)
9 Q$ y/ A! j$ E1 z\" ` - Server_Port = raw_input('please enter ServerPort:')' A& o2 o5 E, n' C0 E( F, Y
- print 'Server_Port: %s' %(Server_Port)
\" p: `7 w1 e6 ]4 \6 ~( g0 D - com =raw_input('please enter com port(1-9):')5 @( r- u0 o/ y! ]
- rt = ComThread(int(com)-1);
- d0 W6 v+ Q8 d - try:9 L$ E0 W\" i$ o0 G% {( ~
- if rt.start():
8 ^1 Q) `' U/ p! E - rt.waiting();
, N2 ^5 u. B: i' u - rt.stop();
0 g, V! ? H: y - else:5 k7 J. e1 }+ O* F- H
- pass;
6 }3 i; ?, x) q) E8 M/ C, Q) I7 E/ Z - except Exception,se:
& @9 X6 v- d8 I. R - print str(se);& q8 u9 T* p( @8 u, u
-
7 O! r/ {4 \7 L - if rt.alive:$ e8 [ S- B3 _2 K1 \( i
- rt.stop();3 {* Y6 o\" l, Q
- os.system("pause")2 i4 \. g1 t' k* |
-
: t0 P0 d) ~\" s' w - print '';8 a( I9 h4 G! _. g7 K- P5 p0 f
- print 'End OK .';
3 U8 T; f6 ^/ ]5 G& | - del rt;
复制代码
1 l6 _1 M, f J8 h |
zan
|