- 论坛徽章:
- 0
|
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- import socket,re,threading
- from Tkinter import *
- def ConnSocket(entText):
- rec=re.compile(r'(^(?:\d{1,3}\.){3}\d{1,3}:\d{1,5}$)')
- ref=re.findall(rec,entText.strip())
- if len(ref)==0:
- v.set(u'输入错误! Tip:<ip:port>')
- ent['foreground']='black'
- ent['background']='red'
- ent.icursor(END)
- btn['state']='normal'
- else:
- entText=entText.split(':')
- HOST=entText[0]
- PORT=int(entText[1])
- if PORT>65535:
- v.set(u'Port[%d] Port<1-65535>'%PORT)
- ent['foreground']='black'
- ent['background']='red'
- ent.icursor(END)
- btn['state']='normal'
- else:
- try:
- s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- s.settimeout(3)
- status=s.connect_ex((HOST,PORT))
- if status==0:
- v.set(u'连接[%s:%d]成功!'%(HOST,PORT))
- ent['foreground']='black'
- ent['background']='green'
- ent.icursor(END)
- else:
- v.set(u'连接[%s:%d]失败!'%(HOST,PORT))
- ent['foreground']='black'
- ent['background']='red'
- ent.icursor(END)
- except Exception as e:
- v.set(u'其它错误 %s'%e)
- ent['foreground']='black'
- ent['background']='red'
- finally:
- s.close()
- btn['state']='normal'
- def selectAll(*ignore):
- ''' Set selection on the whole text '''
- ent.selection_range(0, 'end')
- # returns 'break' to interrupt default key-bindings
- return 'break'
- def startThread():
- btn['state']='disabled'
- entText=ent.get()
- t=threading.Thread(target=ConnSocket,args=(entText,))
- t.start()
- if __name__=='__main__':
- root=Tk()
- root.title(u'Python端口测试 <by Domenet>')
- v=StringVar()
- lb=Label(root,text='<IP:PORT>')
- root.geometry("330x50")
- root.resizable(False, False)
- ent=Entry(root,textvariable=v,width=27)
- v.set('127.0.0.1:8080')
- btn=Button(root,text=u'确 定',command=startThread)
- ent['selectforeground']='white'
- ent['selectbackground']='black'
- ent.bind("<Control-a>", selectAll)
- lb.pack(side=LEFT,padx=2,pady=5)
- ent.pack(side=LEFT,padx=5,pady=5)
- btn.pack(side=LEFT,fill=X,padx=2,pady=5)
- mainloop()
复制代码 |
|