小编Sam*_*erg的帖子

如何从Python中的另一个线程中止socket.recv()

我有一个等待连接的主线程.它产生的客户端线程将回应客户端的响应(在本例中为telnet).但是说我想在一段时间后关闭所有套接字和所有线程,比如在1次连接之后.

我该怎么办?如果我clientSocket.close()从主线程做,它将不会停止做recv.它只会在我第一次通过telnet发送内容时停止,然后它将无法进行进一步的发送和recvs.

我的代码看起来像这样:

# Echo server program
import socket
from threading import Thread
import time

class ClientThread(Thread):
    def __init__(self, clientSocket):
            Thread.__init__(self)
            self.clientSocket = clientSocket

    def run(self):
            while 1:
                    try:
                            # It will hang here, even if I do close on the socket
                            data = self.clientSocket.recv(1024)
                            print "Got data: ", data
                            self.clientSocket.send(data)
                    except:
                            break

            self.clientSocket.close()

HOST = ''
PORT = 6000
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serverSocket.bind((HOST, PORT))
serverSocket.listen(1)

clientSocket, addr = serverSocket.accept()
print 'Got …
Run Code Online (Sandbox Code Playgroud)

python sockets multithreading recv

14
推荐指数
2
解决办法
2万
查看次数

标签 统计

multithreading ×1

python ×1

recv ×1

sockets ×1