- 论坛徽章:
- 0
|
这是我得全部代码,照着你的盖了,还是不行
点击"stop tcp server"后,依然可以接受一次请求- #coding=utf-8
- from Tkinter import *
- import threading
- import socket
- import time
- class ListenThread(threading.Thread):
- def __init__(self, listBox, server, port):
- threading.Thread.__init__(self)
- self.listBox = listBox
- self.server = server
- self.port = port
- self.client = None
-
- def run(self):
- while True:
- try:
- self.client, addr = self.server.accept()
- self.listBox.insert(0, now() + 'Incomming connection: %s:%d\n'%addr)
-
- data = self.client.recv(1024)
- self.listBox.insert(0, 'Receive data: %s\n' % data)
-
- self.client.send('I GOT: %s' % data)
- self.client.close()
- self.listBox.insert(0, 'Close connection\n')
- except Exception, msg:
- self.listBox.insert(0, 'Close connection error, code: ' + str(msg[0]))
- break
- self.listBox.insert(0, '^^^^^^^^\n')
- def stop(self):
- self.server.close()
- if self.client:
- self.client.close()
-
- class Control(threading.Thread):
- def __init__(self, listBox, port):
- threading.Thread.__init__(self)
- self.listBox = listBox
- self.port = port
- self.event = threading.Event()
- self.event.clear()
-
- def run(self):
- server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Create Socket
- server.bind(('', self.port)) #绑定本机1051端口
- server.listen(5) #开始监听
- self.listBox.insert(0, 'Listening on ' + str(self.port) + '\n')
-
- self.lt = ListenThread(self.listBox, server, self.port)
- self.lt.setDaemon(True)
- self.lt.start() #执行监听
- self.event.wait() #进入等待
- try:
- self.lt.stop()
- server.close()
- self.listBox.insert(0, 'Close sever successfully\n')
- except Exception, msg:
- self.listBox.insert(0, 'Close server error, code: ' + str(msg[0]))
-
- def stop(self):
- self.event.set() #结束控制进程
-
-
- class Window:
- def __init__(self, root):
- self.root = root
- root.geometry("600x400")
- self.labList = Label(root, text='Messages output:')
- self.labList.place(x = 10, y = 10)
- self.sbar = Scrollbar(root, orient = VERTICAL)
- self.listBox = Listbox(root, width = 75, height = 10, yscrollcommand = self.sbar.set, selectmode=EXTENDED)
- self.listBox.place(x = 10, y = 30)
- self.sbar.place(x = 462, y = 30, height = 160)
- self.sbar.configure(command = self.listBox.yview)
-
- self.butlisten = Button(root, text = 'Start TCP Server', command = self.Listen)
- self.butlisten.place(x = 500, y = 60)
- self.butclose = Button(root, text = 'Stop TCP Server', command = self.Close, state = 'disabled')
- self.butclose.place(x = 500, y = 100)
- self.butclear = Button(root, text = 'Clear messages', command = self.Clear)
- self.butclear.place(x = 500, y = 140)
-
- self.labPort = Label(root, text='Listening port:')
- self.labPort.place(x = 500, y = 10)
- self.listenPort = IntVar()
- self.listenPort.set(1288)
- self.entPort = Entry(root, width = 10, textvariable = self.listenPort)
- self.entPort.place(x = 500, y = 30)
-
- #self.edit = Text(root, width=60, height=20)
- #self.edit.place(y = 100)
- def Listen(self):
- self.ctrl = Control(self.listBox, self.listenPort.get())
- self.ctrl.setDaemon(True)
- self.ctrl.start() #执行控制线程
- self.butlisten['state']='disabled'
- self.butclose['state']='normal'
-
- def Close(self):
- self.ctrl.stop()
- self.butlisten['state']='normal'
- self.butclose['state']='disabled'
- def Clear(self):
- self.listBox.delete(0, END)
- def now():
- return time.strftime('%Y-%m-%d %H:%M:%S ',time.localtime(time.time()))
-
- root = Tk()
- window = Window(root)
- root.title('Socket server')
- root.mainloop()
复制代码 |
|