如何终止用python写的socket服务端程序?
黄舟
黄舟 2017-04-18 10:20:24
0
6
780

用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都不能终止,请问要怎么终止程序?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(6)
迷茫

Ctrl + C

PHPzhong

在启动线程之前,添加 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)  # <-- add this
    t.start()
    

daemon

Nilai boolean yang menunjukkan sama ada utas ini ialah daemon
benang (Benar) atau tidak (Salah). Ini mesti ditetapkan sebelum start()
dipanggil, jika tidak RuntimeError dinaikkan. Nilai awalnya
diwarisi daripada urutan penciptaan; utas utama bukan daemon
benang dan oleh itu semua utas yang dibuat dalam utas utama lalai kepada
daemon = Palsu.

Keseluruhan program Python keluar apabila tiada benang bukan daemon yang masih hidup
sisa.

这样 <C-c> 的中断信号就会被 rasie。

阿神
kill -9
小葫芦

Tutup tetingkap arahan cmd dan buka semula cmd, inilah yang saya lakukan.

左手右手慢动作

Anda boleh menggunakan modul isyarat Apabila menekan Ctrl+C, tangkap maklumat dan kemudian keluar.

#!/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 ...")
伊谢尔伦

Saya ingat saya boleh

try:
    ......
except KeyboardInterrupt:
    exit()
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan