如何退出有开放连接的Python套接字客户端?

0 投票
2 回答
1982 浏览
提问于 2025-04-16 12:08

下面这个脚本是用来从一个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()

撰写回答