>  Q&A  >  본문

如何终止用python写的socket服务端程序?

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

黄舟黄舟2740일 전744

모든 응답(6)나는 대답할 것이다

  • 迷茫

    迷茫2017-04-18 10:22:24

    Ctrl + C

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:22:24

    지금 添加에서 setDaemon(True)

    으아아아

    데몬

    이 스레드가 데몬
    스레드인지(True) 아닌지(False)를 나타내는 부울 값입니다. 이는 start()가 호출되기 전에 설정해야 하며
    그렇지 않으면 RuntimeError가 발생합니다. 초기 값은
    생성 스레드에서 상속됩니다. 메인 스레드는 데몬
    스레드가 아니므로 메인 스레드에서 생성된 모든 스레드는 기본적으로
    daemon = False

    입니다.

    데몬이 아닌 스레드가 남아 있지 않으면
    전체 Python 프로그램이 종료됩니다.

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

    회신하다
    0
  • 阿神

    阿神2017-04-18 10:22:24

    으아아아

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-18 10:22:24

    cmd 명령 창을 닫고 cmd를 다시 열었는데, 이렇게 했습니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 10:22:24

    Ctrl+C를 눌러 신호 모듈을 사용하면 정보를 캡처한 후 종료할 수 있습니다.

    으아악

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:22:24

    할 수 있다는 것을 기억합니다

    으아악

    회신하다
    0
  • 취소회신하다