- 在线时间
- 479 小时
- 最后登录
- 2026-4-17
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7790 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2923
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- #coding=utf-8
7 d( {# J4 }, F, ~9 \
9 m4 H% r' b0 T: k, o& E* X, z- + v }. Y+ k- L6 q1 _
- import sys,threading,time;
) A7 Q3 J\" b* s - import serial;& t2 ?! a0 r9 S/ G\" y
- import binascii,encodings; z; F8 o6 D5 T* {2 n0 [6 a
- import re;
2 `! l6 i9 {/ E\" W - import os;
, A* U; K3 R/ ]7 N P - from socket import *9 q; I3 w' ^- g% }+ N( |+ G3 _9 U3 n
- from struct import *;
+ V5 \5 A4 \: K/ g' a; Q - #from myutil import *;
/ k3 w6 K\" y8 v - #name: myutil.py3 ^. A1 e) G0 e1 H; Q
- 0 v4 n4 d0 M3 Y0 l0 u/ r9 K' [* r
- mylock = threading.RLock()
% ]6 M: ^7 N8 [& i7 P - 2 Z4 i3 ?: q. U- ^& `/ ]0 T
- Server_IP = ''
4 j( H q% R. E/ @- [* [ - Srever_Port = ''. f- ?; t- _- l6 [\" d2 ^
- 8 i. j+ |# O1 Y
- def print_hex1(s,prev='0x'):5 k' v9 D s% a& k$ B
- for c in s:& e+ ~2 ?1 U0 F2 y7 v, G9 G
- print '%s%02x' %(prev,ord(c)),
! @ H% `2 h. w& n - print/ A+ f5 j0 l O8 J
- def print_hex(s):5 `2 s\" [\" X6 _
- for c in s:6 p# S0 s, c3 Y) @! ]0 Y
- print '%02x' %(ord(c)),
! t\" ]\" Q- ^2 ^' S5 X - print
8 n0 L* Q\" z7 r) {; y -
, O2 t, }! T% J - def hexto_str(s):; L% B' ]' N! b) D5 T
- r ='', z7 F- K8 H3 X% @
- for c in s:
: \. |\" h4 `* t7 l - r += '%02x' %(ord(c))
* o X6 w7 |. i0 d - return r
' v' \; k9 J* J\" v7 X - def strto_hex(s):4 x( i5 B6 u. G# g
- r = s.decode('hex')1 F$ _ h$ n; z6 x
- return r
. _8 x8 D4 j\" k, H( \ - #''代表服务器为localhost! _- n }$ } d- Y# h
- + A g! S\" ^\" p3 L5 N# ?
- #在一个非保留端口号上进行监听
- J7 \* S) t7 K) X: L - 3 ~$ H/ l/ _8 {* b2 [1 ~
-
4 W; U+ p( r' m3 R, e6 I - class ComThread:
7 e- n( U m+ b8 _3 r- ^ - def __init__(self, Port=0):5 W6 d. j9 d+ G0 \- T3 m
- self.l_serial = None;
9 Q# U( F; C- ?+ o: B' @7 c - self.alive = False;
4 y& P+ Y- I+ j: z. c+ `: | - self.waitEnd = None;
7 L$ y+ R+ L4 F( w4 [7 ] B - self.port = Port;
( t\" ^$ W) N8 H2 e -
, t) J) f, |# X4 t: q) Z\" X - #TCP部分
4 G, ~5 S0 S' N. B2 }) A, A3 C - #self.sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2 u$ e1 \0 J8 z' f4 c2 M - self.connection = None
) n# r' \0 ^) h - #数据
9 W# z8 r/ t& H/ h - self.snddata = ''
7 {4 x3 V6 o( i/ I2 D/ k - self.rcvdata = ''
$ c |) ~6 R6 ]0 O - 6 A+ m) T5 X# }9 d4 v
- def waiting(self):# S! e- ]. k& H* r0 m$ K
- if not self.waitEnd is None:
- k$ l# m* n8 A }0 b# @1 z- W - self.waitEnd.wait();$ e' ^4 @/ e; Z6 j* g% A8 Z$ D
- 5 F& m( Z* L. k4 C. y
-
4 I& C+ x3 [9 Y2 B - def SetStopEvent(self):' t( y* {+ A\" _* b- H0 w) r
- if not self.waitEnd is None:
; e) P8 {. r; n! H4 X1 } - self.waitEnd.set();
; E9 x8 U# P0 u9 P& Q - self.alive = False;1 Q6 q( ~* E; h
- self.stop();
# P+ s1 M t6 J - \" P# h( ~4 p& U
-
7 c$ i' v3 i: {. _5 s - def start(self):1 y3 I! g _% k1 u8 r: a0 s
- self.l_serial = serial.Serial();( e* O: e! J8 }) n+ T9 p
- self.l_serial.port = self.port;
$ g( q v$ ?0 [ - self.l_serial.baudrate = 115200;
% _, V: b3 j1 m4 L. z/ F - self.l_serial.timeout = 2; #秒4 Z, N4 W0 k: Q, L
- self.l_serial.open();1 o9 U, @ ]/ r4 I+ [: B3 \
-
' U. u, {2 B7 a, G% R\" S\" l& q - if self.l_serial.isOpen():& Y2 |3 b2 h, ?# u- p! R
- self.waitEnd = threading.Event();, a# ~6 h& a, X3 p# }0 ]# y- Z
- self.alive = True;) B' O0 A0 Q0 r
- print 'open serial port %d ok!\n' %(self.port+1)
\" V7 @# M. |\" r5 d4 k! T - print 'baudrate:115200 \n'
7 L3 }! [\" F$ T0 B. y8 ` - self.thread_read = None;
6 |3 \: r( y; V) U/ y - self.thread_read = threading.Thread(target=self.FirstReader);
& [: w8 Z1 R/ b' p0 D0 v - self.thread_read.setDaemon(1);
! F8 |3 d0 |0 c9 K - self.thread_read.start();
5 Z; ^7 P' u4 x - & v, A3 y8 Z1 `1 d0 Z+ ~
- self.thread_write = None;
+ w( s4 S- n& e\" ]1 ^ - self.thread_write = threading.Thread(target=self.FirstWriter);
8 ]( g( m- o, r& \& T2 t4 Z) z - self.thread_write.setDaemon(1);! F7 I9 m8 U% q, S, A1 m- s
- self.thread_write.start();' r# p: |: p/ Z @
- : D0 V( _4 b+ M# i* |( g
- #TCP部分( y, z, ~3 Y\" E' m. B
- self.thread_TcpClient = None;
p Y) \9 P/ g3 j - self.thread_TcpClient = threading.Thread(target=self.TcpClient);* {+ k: s\" i/ ~4 H\" u
- self.thread_TcpClient.setDaemon(1);
8 `) _/ E! L7 u8 f+ z- s - self.thread_TcpClient.start();' v( q/ C6 c, \5 m) t9 B
- % X* j8 F; K5 F/ o8 ]6 c& [/ X
- self.thread_TcpSend = None;
% u& `( ^# I8 c1 W$ b e - self.thread_TcpSend = threading.Thread(target=self.TcpSend);
$ z2 s; q( U) i8 r7 a4 t+ S - self.thread_TcpSend.setDaemon(1);\" }5 ?- l! k# R- O; _( D# F
- self.thread_TcpSend.start();- X3 ?5 k: B* G1 ~% J
-
7 C6 K7 |. A: y6 U\" u' s3 w( F; W - return True;
6 ], P+ _* P! H6 U6 ` - else:
8 q _# n( E' p, G/ f - return False;- S( |. L1 q: X, P' v' t. e3 A$ t
-
\" M# X7 ^( D6 Y1 c4 N9 h - 9 s9 O! M0 z. ~* L
- def FirstReader(self):9 j2 Q2 W |8 `# K# [* \( a
- while self.alive:$ F9 ^+ k$ \2 p) r% [
- # 接收间隔; Z3 P! A\" W! B
- time.sleep(0.1);
+ d5 j' X5 n\" f8 _3 ? Y2 X6 e) i - try:
$ i: o! S6 D1 [5 `; G\" J - data = '';; c, c: |, f3 | c* N7 a
- n = self.l_serial.inWaiting();
+ B4 E$ p: ^% w b3 W - if n:
8 X) {6 s: g7 F7 E3 F - data = data+self.l_serial.read(n);
8 ?( R* P7 M7 Z O+ E - #for l in xrange(len(data)):
( P: r4 }( |1 V# p ^( @; ~; P - #print '%02X' % ord(data[l]),) g U& O\" F* v% M# ~! J3 H# x
- # 发送数据
& q5 E8 |8 E2 V1 o/ R2 C - print u'->请求:'( ^# O7 g\" q0 [! o$ u# N
- print data;6 ?( K5 t5 E7 [6 p$ R }
- mylock.acquire() 8 q5 J, u/ y: t% O% X
- self.snddata = data' n4 f/ ? u, h. h
- mylock.release()
8 g v\" U' A\" M/ G5 C - #print_hex(data);- \- F8 W. O: `% J3 x
- : h! c# c4 |3 g1 |( X\" Y
- 4 `! w# b\" \! c' k& L1 F
- # 判断结束% d/ {! F2 Z1 }+ Q% }& e0 t0 b
- - w6 i, K# A0 q5 _! m: Z
- except Exception, ex:( {3 E2 p8 G. X$ w1 n' ^
- print str(ex);
/ L9 f9 c1 I6 C3 v -
; }/ g5 B9 u' w% F8 \; `5 Z - self.waitEnd.set();
4 M8 O$ i4 Q5 Y( c& a - self.alive = False;
0 i) h- ]( `( Y3 E - $ p- M. J( B$ I6 I- h9 f$ C
- def FirstWriter(self):& s& A: {% v; g1 z
- while self.alive:5 o7 O o( E) k: N, U7 J. M3 a! I
- # 接收间隔
\" ` j( q$ n2 ]- {3 }1 R - time.sleep(0.1);
' k3 G6 E; t, p6 [$ _7 ^; Q - try:$ L }9 a$ [. R
- #snddata = raw_input('\nenter data send:\n')1 i9 F8 r/ L. l& Y( v9 k4 ^
- if self.rcvdata!='':/ h+ e2 N% d4 L# M8 M( t
- self.l_serial.write(self.rcvdata);
2 i5 X! k' d- ?2 O! H - print u'-<应答:'& P5 Q; J# |4 f4 J/ ~# b5 J4 o
- print self.rcvdata;
0 Z8 R0 n, E9 g8 x- C - mylock.acquire() 8 B+ L5 y! J7 N5 C G
- self.rcvdata = '';
9 B\" W. ^3 X4 d. D: I% j* H - mylock.release()
, j+ x/ ^0 T; ?& U: Q: d - #print_hex(snddata);
' ?/ E8 A! B1 W/ J\" ^7 e) ~ -
/ S8 q% a- l/ t - except Exception, ex:
6 D# U+ }/ h: a5 Q/ W% P - print str(ex);
5 r- U% F4 { B B8 ?: [; A - self.waitEnd.set();
0 j) q' ~. Q. P J - self.alive = False;: i# T5 ?2 U& E
-
9 o8 }5 u* }% \: ], ` - def TcpClient(self):
* z4 Y5 P$ t8 z3 [6 N, ]: w9 O - while True:7 Q% F7 T x6 U& o
- # 接收间隔
3 M9 R( c* F! }2 I8 J# e q - time.sleep(0.1);
2 F4 b/ Y2 G4 B - self.connection = socket(AF_INET, SOCK_STREAM);
) C, V6 l4 u/ O; O - self.connection.connect((Server_IP, int(Server_Port)));
$ E- B6 Q$ B% H* ?) D, R - print 'Connect to Server OK!';
$ Z( `& ^, W3 `( { - self.snddata = ''
! m4 \* Z& t: g0 S - self.rcvdata = ''
/ D2 X9 e4 u6 T+ S* X - while True:
7 K& v/ S. ?9 I* e - #读取客户端套接字的下一行4 _- ^& L2 O- |( H
- data = self.connection.recv(1024)
/ G: Q1 v; Z2 s - #如果没有数量的话,那么跳出循环
\" D7 o$ l! j# u7 @2 R6 M - if not data: break
# V* K0 p6 y x' n - #发送一个回复至客户端% Z) {* A: f( }) n* b
- mylock.acquire()
g! K2 M2 F/ L4 w& A# [+ j - self.snddata = ''3 M' l3 U- I7 }2 j
- self.rcvdata = data
* }* O2 o, z: u( V - mylock.release()) r% S2 w5 C. X8 J; F+ U4 K) z
- #connection.send('Echo=>' + data)
6 l\" o, b! V% J; G9 u* ~; x' F - self.connection.close()
( @& ~9 y2 T- f3 I - ! D. b) `: {, g
- self.waitEnd.set();
6 H- R1 M/ w+ h' a - self.alive = False;& L5 z+ @3 W3 Z7 O! W; r. a
- 9 I+ A- e# y0 S1 U. \1 x
- def TcpSend(self):
5 i3 W9 ? k8 a - while True:+ U7 a9 ?9 t8 K/ U& B; h# V
- # 接收间隔- E% b, }1 |9 Q+ N& R2 S7 {
- time.sleep(0.1);6 V$ l! N$ N6 y4 L
- while True:
: L, | N5 Z5 b2 ~. g$ ` - time.sleep(0.1);+ X\" T8 T' U$ I# P3 W
- try:
& ~4 e& ]' a& f+ d* n' d; } - if not self.connection is None:$ a0 b5 z8 B% k; H! C
- if self.snddata != '':4 C/ \* V- c5 n, q
- self.connection.send(self.snddata)* t, J$ [' D4 l; M: x' w/ Q$ Z
- mylock.acquire()
2 i3 t7 ?# |8 R/ [% }' _ - self.rcvdata = ''
9 }9 e( B& j ?$ S - self.snddata = ''
! l4 L( \- t) H' P5 y - mylock.release()
2 P1 g& `% i, z* {' F - except Exception, ex:' [ F D0 S/ t0 j\" s2 B4 k
- pass 2 U- B& N1 l- {0 C( L1 j
- def stop(self):8 J9 A' a1 F: w! `; H% v
- self.alive = False;
6 j; Y1 C/ `$ H- |; K8 S - self.thread_read.join();: f+ J7 {4 D, z' U
- if self.l_serial.isOpen(): W: F\" x9 [; c9 b: g\" M# `
- self.l_serial.close();
- V' s- J$ z: k - - @# i L& T: X. h\" V* Q( G* w
- & n, y, p) u7 _
-
. E4 J/ M\" y0 F# F - #测试用部分
: s0 u; S( v# O2 a n+ g* h - if __name__ == '__main__':* h8 r$ Q0 R* i
- print 'Serial to Tcp Tool 1.00\n' # j& W l, t% ~( |
- print 'Author:yangyongzhen\n'\" F I$ P8 e) W+ _& F
- print 'QQ:534117529\n'
6 v- s( m# i+ I2 W/ d - print 'Copyright (c) **cap 2015-2016.\n'# U\" S8 B8 R# M: }/ O3 E
- ' d0 K; U/ m' N: m1 p) f
- Server_IP = raw_input('please enter ServerIP:')
4 n4 J0 v. N! d% V' m - print 'Server_IP: %s' %(Server_IP)
& V% L0 ]6 ~8 d3 E: u - Server_Port = raw_input('please enter ServerPort:'). M8 X! }8 w q1 k! f- x
- print 'Server_Port: %s' %(Server_Port)
, _ K, I# O* x2 Z; ^* F - com =raw_input('please enter com port(1-9):')! H6 _* s) N\" Y' L0 |3 Z
- rt = ComThread(int(com)-1);
# s* i& ]1 \, t$ o - try:1 F4 p n J7 O% _ n) A8 K
- if rt.start():0 O; X! ?1 V2 H4 Y4 }' T
- rt.waiting();
3 ]2 l\" @4 o; T2 m - rt.stop();
/ ?+ h6 Y. G7 S$ B9 c' @+ ] - else:
- A' V8 \9 g# y' [$ l' p$ X% C - pass;
, ~\" M5 H1 f9 l' n4 S0 `8 W - except Exception,se:
\" ?# B! |: C9 U) ] - print str(se);4 J1 E2 \9 F( @& s0 R
- 0 [1 _# _$ b) s\" M) Q
- if rt.alive:+ B( U# C2 ]\" i# f$ ?, m7 u
- rt.stop();* q( m! a. D/ Q! K0 M
- os.system("pause"); }+ m; Y- L7 f/ m4 l/ K& x% ~: L
- 3 U/ H$ U' H! f
- print '';4 l; }' }$ t: p. i% a
- print 'End OK .';2 E& F* ~) k9 w: q; B6 ^
- del rt;
复制代码
. ~+ w* q j9 ]( d |
zan
|