2017-10-18 57 views
1

我有以下python UDP套接字客户端。按crtl + c时我想退出程序,但由于线程原因没有发生,我该如何解决?不退出python套接字程序

import socket 
from threading import Thread 
import signal 
import sys 
message = "well" 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
server_address = ('127.0.0.1', 3447) 
def sighandler(signum, frame): 
    # Close the server 
    global sock 
    print 'Shutting down server...' 
    # Close existing client socket 
    sock.close() 
signal.signal(signal.SIGINT, sighandler) 

def recv(): 
    while True: 
     print "Waiting to receive data" 
     data, server = sock.recvfrom(4096) 
     print "Server : ", server 
     print "data : ", data 
Thread(target=recv).start() 

try: 
    while True: 
     message = raw_input() 
     print >>sys.stderr, 'sending "%s"' % message 
     sent = sock.sendto(message, server_address) 
except: 
    import traceback; traceback.print_exc(); 

finally: 
    sock.close() 

回答

0

有时候你在线程需要的是:

t = Thread(target=recv) 
# Daemon runs in background, and main can respond to ctrl-c. 
t.daemon = True 
t.start()