- 在线时间
- 481 小时
- 最后登录
- 2026-8-25
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7859 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2946
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1177
- 主题
- 1192
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- #coding=utf-8
# ~/ c# Z# }) O' I# j3 M, M
: e2 D6 f- |2 c7 N0 E& I- ( C/ y9 o) U9 c& }
- import sys,threading,time;6 K, o' y' R4 w8 N
- import serial;
2 ?# H' d' w+ H9 L0 x6 m; Q - import binascii,encodings;
4 p2 _. O3 U9 n. B% N - import re;
& |- z9 Y8 Q1 v% ? - import os;
7 r$ \ J6 ^* `9 }8 R; L! P. L - from socket import *
2 z$ Y\" K, X, C+ o$ s$ b3 n5 r+ G - from struct import *;
/ b. O' v9 Q C1 ~- Z - #from myutil import *;
& S- [\" @) O$ A- f - #name: myutil.py7 x\" Y( D/ C) c6 Z2 {
-
9 R. y! ^7 ?# l- N b - mylock = threading.RLock()
( T\" H/ _2 T' Y\" k# `: v - * k$ M9 ~! z- W- o* F5 y
- Server_IP = ''% K$ R- V( D G3 u/ U0 l& h
- Srever_Port = ''' c7 @- [ u- U* J6 k3 D
- ( C+ Z; V& d' H
- def print_hex1(s,prev='0x'):
& n% W$ y+ T, k' X/ e& x - for c in s:
0 l9 S$ w( ?+ @4 l. H% W- U6 I - print '%s%02x' %(prev,ord(c)),9 o+ \3 @& j% |, L
- print
( |0 Q. P' F* A+ H4 Y - def print_hex(s):4 h X4 S% Z: G4 p\" B3 k+ q
- for c in s:3 a0 p$ @9 L1 z) a
- print '%02x' %(ord(c)),
- ~& K0 K; e# b: k/ }1 ~( Y - print
8 }# G- C4 B; i, h - \" P) m0 f5 f9 `4 m) b7 o
- def hexto_str(s):, E, ~\" T- l6 V
- r =''4 W- d, ]& \1 \- i1 s# `
- for c in s:
/ l q( \+ L% F2 e. g2 O ` - r += '%02x' %(ord(c))
! j' z) \9 N7 D J, s0 Z5 W; U* f5 w - return r
& Z3 | ]$ O4 ?$ O$ ]! X# E7 @ - def strto_hex(s):9 j; D5 v7 N7 j
- r = s.decode('hex')6 x$ ~9 L4 L* g* M/ ^
- return r
; d% L& I2 Y: {1 O+ f Z5 r - #''代表服务器为localhost
4 j; A0 }$ ~' d9 B: i5 U: x -
$ N( e) x$ ]! s - #在一个非保留端口号上进行监听
/ ~, W: _- e1 r: U0 k% r4 l* O' M -
]7 e4 _6 _\" u+ o! n - ! |\" v5 S\" j) }% O; R* r. u
- class ComThread:
$ |9 Y: l6 W: ^\" x$ c- }' ]2 T - def __init__(self, Port=0):\" @- V0 n; b: ]+ t5 x' a
- self.l_serial = None;1 c3 n5 a+ W, z+ i$ `$ r2 F
- self.alive = False;
0 |* |& b. q& `, x% y3 ]7 J - self.waitEnd = None;
; y- {! }* X. S- @# Z - self.port = Port;
2 n\" V+ b; u1 R ]: d, i -
6 T: r% B. t& c/ ]' D3 _2 K - #TCP部分
# t% ]( q) U( o1 K0 x - #self.sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
1 G& x0 V; K# |6 v - self.connection = None
# h! J5 A( f7 u; t9 _1 l* n - #数据* B8 ~# |. n& f0 H3 b2 O* H+ t/ u( H
- self.snddata = ''
$ Z9 ~ K1 J1 Z. N - self.rcvdata = ''/ F4 F+ @6 ]* Z0 ~) i
-
. U0 Y* h5 x$ C& v- M1 @ - def waiting(self):3 ~9 Y) H# e7 G# b- f9 p0 {
- if not self.waitEnd is None:; {9 R7 A7 T s9 H
- self.waitEnd.wait();! r6 R$ j: ]) L0 e. e K% ]
-
) d1 e. t( U0 H5 F% q# `4 b8 f -
2 ^+ g7 e& Q3 | G1 m1 _( b- c - def SetStopEvent(self):
7 `$ x( f+ N% S& i - if not self.waitEnd is None:
, F) m, O1 t9 S/ M - self.waitEnd.set();
& x8 y$ w2 A* x W2 t& r9 ^ - self.alive = False;
3 S# G8 ]0 ]7 w9 q! p - self.stop();
- h# m/ r4 B _% e4 a6 p- ~ -
7 W* M6 d: }2 Q2 T1 ]% D - 4 A0 @6 D3 V\" L* ~5 A- [
- def start(self):
3 X4 N8 N& R8 I - self.l_serial = serial.Serial(); }' `8 A( v4 m. [
- self.l_serial.port = self.port;
% @3 U; W) K \1 D# P8 d! z6 [ - self.l_serial.baudrate = 115200;
7 {7 a6 `% n! ?1 o) l j! Z - self.l_serial.timeout = 2; #秒
2 G. Q' H8 G' q+ J - self.l_serial.open();
' Y' T: n% B+ s% V7 ~ -
$ J0 H2 t. ]7 \- a$ }* z9 U - if self.l_serial.isOpen():. o& N K& Y5 c
- self.waitEnd = threading.Event();( v1 i% H- Q1 j% K5 i
- self.alive = True;% I$ X) _5 |- ~+ @! T
- print 'open serial port %d ok!\n' %(self.port+1)
# S+ |: f9 c3 p( z9 S( v( j1 \) h - print 'baudrate:115200 \n'+ z; I+ B! H6 ?( a; B
- self.thread_read = None;
+ L! l( V; R$ x0 ?6 m - self.thread_read = threading.Thread(target=self.FirstReader);- d$ T+ l; D# d/ o! w
- self.thread_read.setDaemon(1);
- }\" Z! X7 ?' f7 P7 }) c\" F - self.thread_read.start();
% w! j4 H; ]8 h\" V! B - 9 f: }/ I. l O
- self.thread_write = None;1 }9 F; X- j! h: n6 H
- self.thread_write = threading.Thread(target=self.FirstWriter);/ W7 h! E- ]! X3 u
- self.thread_write.setDaemon(1);6 B$ k: t& L) G& P
- self.thread_write.start();& s' U- [* f! u$ |7 P: z2 K
- / g, J1 a$ W* j& J/ L# w3 @
- #TCP部分
# J* U- R( O5 |0 F# C( _, ~ - self.thread_TcpClient = None;
4 Y7 V- p2 ^/ o* Z9 G - self.thread_TcpClient = threading.Thread(target=self.TcpClient);' b& Y& E2 D! E, ?5 a: f
- self.thread_TcpClient.setDaemon(1);5 R! F+ Z( ~\" {) R! ~3 {
- self.thread_TcpClient.start();% e) ?$ [9 I6 a\" n) Y/ ]
- 5 y) a3 U: _/ H0 V* I
- self.thread_TcpSend = None;, }. h. |5 V2 m$ H1 o
- self.thread_TcpSend = threading.Thread(target=self.TcpSend);
5 h% P7 D8 q, d% w - self.thread_TcpSend.setDaemon(1);
$ a. d4 |1 U9 l' l - self.thread_TcpSend.start();- v) Z\" T% r& W
- B6 v. X1 }! Y: [4 [1 k, k p
- return True;
. e) j2 w$ T% X\" q - else:# Y$ s/ X/ I3 d- |% m\" b
- return False;' d\" f' g* h* {3 H
- 5 X# [/ Q8 x5 r1 @0 j
-
9 e4 r* Y; i: U5 c! H1 l - def FirstReader(self):
# d$ [& n0 D( ^) X8 s4 O - while self.alive:
! J: p8 h0 K g3 B; \7 ~& G - # 接收间隔' `/ z0 {# R3 M& N& |
- time.sleep(0.1);
! c9 w9 S; s* z; ? - try:1 t2 _) A! m4 g- U. S/ H, X
- data = '';6 r( v; m7 Y0 X6 r( P
- n = self.l_serial.inWaiting();3 s4 F/ @% Y. c
- if n:- h& G: n# H) h& e
- data = data+self.l_serial.read(n);2 y1 p! h% y* n K8 U1 L
- #for l in xrange(len(data)):3 y% L( A0 N2 A8 X( B
- #print '%02X' % ord(data[l]),
5 ?9 P& y2 Z* h- T: ]- q n - # 发送数据3 w* I. } p, D8 F
- print u'->请求:'# _% X+ r: E2 A% z# w. C
- print data;: ?/ e* ]% V9 c5 p o
- mylock.acquire() 1 ]* z/ t* ^: X% j: }; w0 j
- self.snddata = data
6 V' X/ F- c6 ?/ A! [ - mylock.release()5 o9 H% o$ L% J% ]' ]3 ]3 F
- #print_hex(data);
/ P2 ^: D3 m/ u/ |# J! N4 t w - 6 F9 r' g ?0 w( } ^* x1 d9 m
- 4 v I/ h\" E& b' f8 s2 D
- # 判断结束
- P, c: k9 L( T( o& T -
% U7 {! p& g* o J7 M - except Exception, ex:; c9 e% i* Q Q, n- ^
- print str(ex);# g\" \( K6 b9 b/ S' o' O
-
6 z( C0 \! K& P1 \+ o - self.waitEnd.set();
# y) T8 O; @3 C - self.alive = False;
! ` Z# T& Z5 r0 G- j) @ -
9 j! s+ t$ u# X7 m9 p - def FirstWriter(self):) ~0 }0 l% W8 w6 e+ s& b I3 i% F
- while self.alive:
7 R1 \' o) A. f( q$ i, L( S - # 接收间隔# _# \, F3 [9 h( `2 j6 ~
- time.sleep(0.1);
# ~5 J; K/ j$ v( }2 z - try:
1 M: J3 _( O+ o0 x6 r, w - #snddata = raw_input('\nenter data send:\n')
; L* j' m& ~5 @5 q% I$ p+ j: X' Z - if self.rcvdata!='':
# A5 ]4 ^3 R! Q$ w - self.l_serial.write(self.rcvdata);
+ y! [7 H8 G% N1 g7 X\" E - print u'-<应答:'
' E0 [ a8 @0 N3 y c, D$ Q7 y4 ] - print self.rcvdata;! G- n! @% [7 _0 L* W! I' _- t
- mylock.acquire()
: F% D% W% ?: _8 m4 ?: _' b - self.rcvdata = '';5 i5 Z* ^( ?% A' X! Q7 \, I7 a+ r
- mylock.release()
, t R, A7 @/ ]& @8 n% ^ - #print_hex(snddata);
1 T\" U5 J) _( a8 \9 d5 t -
6 H' Z8 g1 |9 G+ g0 `) z, y7 B - except Exception, ex:
, G9 z; e7 ]7 F! J5 ?9 H - print str(ex);( m$ m; @* p' L& X
- self.waitEnd.set();( S3 F0 ]# I5 V. C4 i\" D
- self.alive = False;1 G, t' ?8 d\" L. R4 E4 m1 D2 h
- ( x, [$ Q! \* h, |0 c
- def TcpClient(self):
$ V0 C: v4 Z1 ]/ j1 L- ^ - while True:: t( `2 w$ m3 u( o7 G i3 C' B4 m
- # 接收间隔1 a. [* l# Y4 V* V0 a, j' n y
- time.sleep(0.1);
) Z3 A5 j9 Q- L; U6 J' x6 ] - self.connection = socket(AF_INET, SOCK_STREAM);
\" m4 H& l$ @+ k# r - self.connection.connect((Server_IP, int(Server_Port)));
# G, c8 ^+ x5 T2 Z9 H - print 'Connect to Server OK!';
# z; v- p\" W& q0 Z+ i: X - self.snddata = ''. l$ ]% Q# I; }8 @
- self.rcvdata = ''
! v1 | ?& X1 \6 q. \ - while True:, i& P. B9 y\" y7 ?
- #读取客户端套接字的下一行
\" n7 ~) \/ z1 y8 d* H - data = self.connection.recv(1024)( w9 Z4 f7 M6 C3 }
- #如果没有数量的话,那么跳出循环
2 e! o7 q( [9 Y3 _+ J - if not data: break$ A$ W9 D- j3 ]+ J! P
- #发送一个回复至客户端$ o8 u8 o/ O! A. \# l
- mylock.acquire() 9 Y0 ]% d7 f. B2 S Z
- self.snddata = ''' M$ \& r7 m+ C# X: }, G
- self.rcvdata = data& \. u2 a0 @\" ]
- mylock.release()- r/ D- f* }& z
- #connection.send('Echo=>' + data)& e1 [) ?1 t* }
- self.connection.close(): k1 ^8 Q( U D! k4 x7 G/ n, \
- * K8 R( T. L. ]; V0 {3 S% _+ {. @
- self.waitEnd.set();; D2 S R' _- T% `5 L
- self.alive = False;' B' q, Q6 H, }7 I) r9 S# A
- 1 {# Z) M/ ]6 a2 F9 X1 ]) j
- def TcpSend(self):5 s\" Y: c3 V. p5 X0 S
- while True:) W2 B; {% V. ~( a% v' Z( S
- # 接收间隔
* ^+ t! ]* I2 x0 M; P - time.sleep(0.1);5 `( R/ f/ [3 C1 Y. T! d
- while True:
6 }& `2 {* d% x: Q% k3 R [ - time.sleep(0.1);
+ ]6 ?8 q' m! P9 D- d- }' {7 S$ x - try:3 b- Q- k- T0 Z% e6 `
- if not self.connection is None:) g) N4 d1 @. ~\" i' M
- if self.snddata != '':3 W$ L3 O$ q7 T2 }; ] u9 D4 o
- self.connection.send(self.snddata)3 A! U# ~ x- T' o- _! c
- mylock.acquire()
! E$ |\" H! Z; X9 N - self.rcvdata = ''+ D! ^0 h& J, g; M( w
- self.snddata = ''; e* h* ? ]8 p
- mylock.release()
% n9 u, B2 \# |4 R, P4 J+ H - except Exception, ex:0 C\" k9 O% L1 G7 z- E
- pass
0 l2 u ~. g3 [! F\" L/ O - def stop(self):
5 T2 r4 |6 \2 E8 N' V& t4 z- m - self.alive = False;+ K\" A% i& \ D& Y) Z/ z
- self.thread_read.join();/ R/ W& `7 @' F) O$ @- W6 b. A
- if self.l_serial.isOpen():
( I2 V. S: G' I% f+ w5 F a - self.l_serial.close();
# I\" U* N8 Z( D8 ~5 ~1 N -
' g6 H# |+ m4 [6 }3 c; Q\" N1 E - * N1 O4 R; P8 c\" `& D
-
, V, p6 v- y9 f9 d5 S - #测试用部分0 _+ f7 n) C4 d
- if __name__ == '__main__':
( q! j' B+ r! P' E) r4 d - print 'Serial to Tcp Tool 1.00\n'
6 i+ W: K! d# u' g/ U7 j - print 'Author:yangyongzhen\n'/ \4 F- {+ B: E+ O% U\" Z. {
- print 'QQ:534117529\n'
5 D\" e4 k\" { C - print 'Copyright (c) **cap 2015-2016.\n'
3 j$ ]0 s/ Q& R, Q& l- |\" m' g -
- x4 A\" B: M7 {) P* C - Server_IP = raw_input('please enter ServerIP:'). X# l; T2 X& }: @- Q7 C( X
- print 'Server_IP: %s' %(Server_IP)
$ S* o- h\" X! ?( Y( f+ y. ?5 r - Server_Port = raw_input('please enter ServerPort:')
+ ]6 B7 y( U- S - print 'Server_Port: %s' %(Server_Port)
1 f g/ s1 \/ u3 Q# C - com =raw_input('please enter com port(1-9):')
$ S\" T3 B8 Y- { l; ^# E - rt = ComThread(int(com)-1);
8 c; L# U% Z) Z2 ~9 ^4 G - try:
- ]5 _2 _+ v6 R9 B - if rt.start():9 E, a y/ g\" z* c5 {' }* u
- rt.waiting();4 N f( h s2 C B( {: V' n
- rt.stop();7 D5 h' l- v( V7 E
- else:
0 ^\" g7 w- B\" }; a2 b - pass; \" k. W\" ?/ c X# q9 W- n
- except Exception,se:
1 w4 G7 ?( e. F0 e1 H' `, A - print str(se);0 ~; l' w+ S) x0 d. a# H
- . |\" m3 j5 i2 G3 G
- if rt.alive:; K' N' n' _8 ^ O2 o% | }' N
- rt.stop();
) Z7 i\" U! b7 T8 Z - os.system("pause")8 o4 g @0 i' Q# c9 s
- ! \3 b. A! |\" \( k0 n# @
- print '';\" t9 Q' u0 O A/ N
- print 'End OK .';
, \+ G- V/ ]2 [: j% W - del rt;
复制代码
; r5 o3 A6 _- S |
zan
|