用python写了一个socket服务端的程序,但是启动之后由于监听连接的是一个死循环,所以不知道怎样在cmd运行程序的时候将其终止。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import socket
import threading, time
def tcplink(sock,addr):
print('Accept new connection from %s:%s...' %addr)
sock.send(b'Welcome!')
while True:
data=sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8')=='exit':
break
sock.send(('Hello,%s!'% data.decode('utf-8')).encode('utf-8'))
sock.close()
print('Connection from %s:%s closed.' % addr)
s=socket.socket()
s.bind(('127.0.0.1',1234))
s.listen(5)
print('Waiting for conection...')
while True:
#accept a new connection
sock,addr=s.accept()
#create a new thread
t=threading.Thread(target=tcplink,args=(sock,addr))
t.start()
在win10上的cmd运行后的情况是按ctrl+c,ctrl+z,ctrl+d都不能终止,请问要怎么终止程序?
关闭cmd命令窗口,重新开启一个cmd,我是这么做的。
可以使用signal模块,当按住Ctrl+C时,捕捉信息,然后退出.#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
def do_exit(signum, frame):
print("exit ...")
exit()
signal.signal(signal.SIGINT, do_exit)
while True:
print("processing ...")
Ctrl + Ckill -9
我记得可以try:
......
except KeyboardInterrupt:
exit()
在启动线程之前,添加 setDaemon(True)while True:
#accept a new connection
sock,addr=s.accept()
#create a new thread
t=threading.Thread(target=tcplink,args=(sock,addr))
t.setDaemon(True) #
t.start()
这样 的中断信号就会被 rasie。
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd13980.html
相关文章 Recommend
3809

被折叠的 条评论
为什么被折叠?



