如何退出有开放连接的Python套接字客户端?
下面这个脚本是用来从一个socket连接接收数据的,但它对CTRL+C这个信号没有反应,也就是说你按下CTRL+C的时候,程序不会停止:
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
"""
import socket
HOST = '192.168.178.1'
PORT = 1012
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while 1:
data = s.recv(1024)
print 'Received', repr(data)
s.close()
那么,怎么修改这个程序,让它能够在接收到输入或者默认的信号时,能够打破这个无限循环,从而优雅地结束程序呢?
2 个回答
0
一种解决办法是像S. Prasanna在他的博客文章中所示,从另一个线程关闭这个连接。另一种方法可能是以某种方式捕捉到信号。
0
使用选择
import socket
import select
HOST = '192.168.178.1'
PORT = 1012
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setblocking(1)
s.connect((HOST, PORT))
time_out=None
ready=[[s],[],[], time_out]
if ready:
s.recv(1024)
s.close()